void GetAnimationEvents(Animator animator) { if (animator == null) return; #if UNITY_5_0 var anim = (UnityEditor.Animations.AnimatorController)animator.runtimeAnimatorController; foreach( var clip in anim.animationClips ) { foreach( var ev in AnimationUtility.GetAnimationEvents(clip) ) { MethodWithObject item = methdoList.Find( (name) =>{ return name.method.Equals(ev.functionName) ; } ); if( item == null ){ item = new MethodWithObject(); item.method = ev.functionName; methdoList.Add(item); } if( !item.objectList.Exists( (obj)=>{ return animator.Equals(obj); } ) ) { item.objectList.Add(animator ); } } } #else var anim = (UnityEditorInternal.AnimatorController)animator.runtimeAnimatorController; if (anim == null) return; for (int i=0; i<anim.layerCount; i++) { var layer = anim.GetLayer (i); for (int r=0; r< layer.stateMachine.stateCount; r++) { var state = layer.stateMachine.GetState (r); var clip = state.GetMotion () as AnimationClip; if (clip == null) continue; foreach (var ev in AnimationUtility.GetAnimationEvents(clip)) { CallbackCallObject item = callbackCallObjectList.Find ((name) => { return name.method.Equals (ev.functionName); }); if (item == null) { item = new CallbackCallObject (); item.method = ev.functionName; callbackCallObjectList.Add (item); } if (!item.callComponent.Exists ((obj) => { return animator.Equals (obj); })) { item.callComponent.Add (animator); } } } } #endif }