Unity Animator动态添加事件

using UnityEngine;

 public class Myscript01 : MonoBehaviour {
     #region --变量定义
     private Animator animator;
     private AnimationClip[] clips;
     #endregion
 
     #region --系统函数
     private void Start()
     {
         animator = this.GetComponent();
         clips = animator.runtimeAnimatorController.animationClips;
 
         AnimationClip _clip = clips[0];
         AddAnimationEvent(animator, _clip.name, "StartEvent", 0);
         AddAnimationEvent(animator, _clip.name, "HalfEvent", _clip.length* 0.5f);
         AddAnimationEvent(animator, _clip.name, "EndEvent", _clip.length);
     }
     private void OnDestroy()
     {
         CleanAllEvent();
     }
     #endregion
 
     #region --自定义函数
     private void StartEvent()
     {
         Debug.Log("开始播放动画");
     }
     private void HalfEvent()
     {
         Debug.Log("动画播放了一半");
     }
     private void EndEvent()
     {
         Debug.Log("播放动画完毕");
     }
 
     /// 
     /// 添加动画事件
     /// 
     /// 
     /// 动画名称
     /// 事件方法名称
     /// 添加事件时间。单位:秒
     private void AddAnimationEvent(Animator _animator, string _clipName, string _eventFunctionName, float _time)
     {
         AnimationClip[] _clips = _animator.runtimeAnimatorController.animationClips;
         for (int i = 0; i<_clips.Length; i++)
         {
             if (_clips[i].name == _clipName)
             {
                 AnimationEvent _event = new AnimationEvent();
                 _event.functionName = _eventFunctionName;
                 _event.time = _time;
                 _clips[i].AddEvent(_event);
                 break;
             }
         }
         _animator.Rebind();
     }
     /// 
     /// 清除所有事件
     /// 
     private void CleanAllEvent()
     {
         for (int i = 0; i

运行如下
Unity Animator动态添加事件_第1张图片在这里插入图片描述

紧接着发现一个现象
Unity Animator动态添加事件_第2张图片
这几个用来接收事件的方法貌似必须在动画物体身上,不然就会报错
在这里插入图片描述
‘正面荧光_0’ AnimationEvent ‘StartEvent’ has no receiver! Are you missing a component?
‘正面荧光_0’动画事件‘StartEvent’没有接收器!你是不是少了一个部件?

你可能感兴趣的:(unity,animator)