Unity 3D 动画帧事件

Unity 3D 动画帧事件 发表时间:2015-11-17 10:55

点上方绿标即可收听朗读音频

双击文章内容从指定位置处朗读

  前几天在项目开发中碰到一个这样的需求RPG游戏中特效和动画播放不同步的假如主角在攻击NPC时先实例化特效后播放动画动画毕竟是有一个时间长度的等到动画播放攻击挥刀的那一瞬间时特效可能早就播放完了于是就想着在动画播放到某一帧的时刻才实例化特效这样就解决了动画与特效不同步的问题首先我们要做的是如何给动画添加事件?

1建立一个空白的Unity工程导入一个带有动画的模型

前期准备基本上就这么多了接下来就可以添加动画事件了添加动画事件有两种方法一:直接在模型中添加事件

到此处设置已完成了运行下看会发生怎样的结果

报错了回掉函数找不到接收者说白了就是我们没有给人家回掉函数的定义那么在脚本中定义该回掉函数吧!

OK在场景中挂载该脚本再次运行

动画播放了回掉函数也生效了!此时再实例特效就OK了

那么开始第二种方法我们可以对任意动画任意帧添加任意事件貌似说的有点任性了说的好像和真的一样那就看看到底是不是真的

在码代码之前我们先去学习一个叫做AnimationEvent的东东

了解这几个参数我们就可以写代码了

using UnityEngine; using System.Collections; public class TestAnimationEvent : MonoBehaviour { /// 
    /// 我们要添加事件的动画 /// 
    public AnimationClip clip; public GameObject target; // Use this for initialization
    void Start() { AddAnimationEvent(); } /// 
    /// 代码中自定义事件 /// 
    public void AddAnimationEvent() { //创建动画事件 AnimationEvent animationEvent = new AnimationEvent(); //设置事件回掉函数名字 animationEvent.functionName = "GoToTarget"; //传入参数 animationEvent.objectReferenceParameter = target; //设置触发帧 animationEvent.time = 1.0f; //注册事件
 clip.AddEvent(animationEvent); } /// 
    /// 可视化添加动画帧事件 /// 
    public void CallFuncation() { Debug.Log("Animation Event Triggered !"; } /// 
    /// 代码添加回掉函数 /// 
    /// 
    public void GoToTarget(GameObject go) { this.transform.LookAt(go.transform); Debug.Log("目标物体:" + go.name + " " + go.transform.position); if (Vector3.Distance(this.transform.position, go.transform.position) < 0.2f) { return; } else { transform.position= Vector3.MoveTowards(this.transform.position, go.transform.position, 2f); } } }

好了我们来运行一下测试结果就是人物移动到目标点

运行后

好了到此基本上完成了如果有什么疑问联系我哦!

工程代码: http://pan.baidu.com/s/1fZ9pW

 

亲,眼睛太累了,关注exread(睿读)微信号,用耳朵“阅读”微信。

您可以将文章的链接或收藏的微信发送到睿读微信号中,我们会帮您转换成音频来听读,让您的眼睛休息一下吧!
查看来源 违规举报