public void Refresh() { //var eac = animator.runtimeAnimatorController as UnityEditor.Animations.AnimatorController; HashToName = new Dictionary <int, string>(); Animas = new Dictionary <string, YuoAnimaItem>(); switch (animatorType) { case AnimatorType.Controller: foreach (var item in animatorController.layers[0].stateMachine.states) { HashToName.Add(item.state.nameHash, item.state.name); var anima = new YuoAnimaItem(); anima.AnimaName = item.state.name; anima.Clip = item.state.motion as AnimationClip; Animas.Add(item.state.name, anima); } break; case AnimatorType.Override: var eac = animatorOverrideController.runtimeAnimatorController as UnityEditor.Animations.AnimatorController; foreach (var item in eac.layers[0].stateMachine.states) { HashToName.Add(item.state.nameHash, item.state.name); var anima = new YuoAnimaItem(); anima.AnimaName = item.state.name; anima.Clip = animatorOverrideController[item.state.motion as AnimationClip]; Animas.Add(item.state.name, anima); } break; default: break; } }
private void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { if (Animas.ContainsKey(HashToName[stateInfo.shortNameHash])) { NowAnima = Animas[HashToName[stateInfo.shortNameHash]]; foreach (var item in NowAnima.Events) { item.num = 0; if (item.eventType == AnimaEventType.enter) { item.num++; item.action?.Invoke(); } } } else { Debug.LogError($"{HashToName[stateInfo.shortNameHash]} 没有找到"); } //print($"OnStateEnter {HashToName[stateInfo.shortNameHash]}"); }
public YuoTransition(Animator animator, YuoAnimaItem from, YuoAnimaItem to) { anima = animator; this.from = from; this.to = to; }