Unity Animator动态添加事件

using UnityEngine;

 public class Myscript01 : MonoBehaviour {
     #region --变量定义
     private Animator animator;
     private AnimationClip[] clips;
     #endregion
 
     #region --系统函数
     private void Start()
     {
         animator = this.GetComponent<Animator>();
         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("播放动画完毕");
     }
 
     /// <summary>
     /// 添加动画事件
     /// </summary>
     /// <param name="_animator"></param>
     /// <param name="_clipName">动画名称</param>
     /// <param name="_eventFunctionName">事件方法名称</param>
     /// <param name="_time">添加事件时间。单位:秒</param>
     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();
     }
     /// <summary>
     /// 清除所有事件
     /// </summary>
     private void CleanAllEvent()
     {
         for (int i = 0; i<clips.Length; i++)
         {
             clips[i].events = default(AnimationEvent[]);
         }
         Debug.Log("清除所有事件");
     }
     #endregion
 }

运行如下
在这里插入图片描述在这里插入图片描述

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

posted @   哒哒哒~~~  阅读(642)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示