using UnityEngine; using System.Collections; using UnityEngine.Events; namespace UMA.PoseTools { /// /// Auxillary slot which adds an UMAExpressionPlayer to a newly created character. /// public class ExpressionSlotScript : MonoBehaviour { public void OnCharacterBegun(UMAData umaData) { var expressionPlayer = umaData.GetComponent(); if (expressionPlayer != null) { expressionPlayer.SlotUpdateVsCharacterUpdate++; } } public void OnDnaApplied(UMAData umaData) { var expressionSet = umaData.umaRecipe.raceData.expressionSet; if (expressionSet == null) { if (Debug.isDebugBuild) Debug.LogError("Couldn't add Expressions to Race: " + umaData.umaRecipe.raceData.raceName, umaData.gameObject); return; } var expressionPlayer = umaData.GetComponent(); if (expressionPlayer == null) { expressionPlayer = umaData.gameObject.AddComponent(); expressionPlayer.SlotUpdateVsCharacterUpdate++; umaData.CharacterUpdated.AddListener(new UnityAction(umaData_OnCharacterUpdated)); } expressionPlayer.expressionSet = expressionSet; expressionPlayer.umaData = umaData; foreach (var hash in expressionSet.GetAnimatedBoneHashes()) { umaData.skeleton.SetAnimatedBoneHierachy(hash); } } void umaData_OnCharacterUpdated(UMAData umaData) { var expressionPlayer = umaData.GetComponent(); if (expressionPlayer.SlotUpdateVsCharacterUpdate-- == 0) { UMAUtils.DestroySceneObject(expressionPlayer); umaData.CharacterUpdated.RemoveListener(new UnityAction(umaData_OnCharacterUpdated)); return; } } } }