Unity3D动画帧事件
来源:互联网 发布:汇川 4da编程 编辑:程序博客网 时间:2024/09/21 06:34
前几天在项目开发中碰到一个这样的需求,RPG游戏中,特效和动画播放不同步的。假如主角在攻击NPC时,先实例化特效,后播放动画。动画毕竟是有一个时间长度的。等到动画播放攻击挥刀的那一瞬间时,特效可能早就播放完了。于是就想着在动画播放到某一帧的时刻才实例化特效,这样就解决了动画与特效不同步的问题。首先我们要做的是如何给动画添加事件?
1,建立一个空白的Unity工程,导入一个带有动画的模型。
前期准备基本上就这么多了,接下来就可以添加动画事件了。添加动画事件有两种:方法一:直接在模型中添加事件
到此处设置已完成了。运行下看会发生怎样的结果。
报错了,回掉函数找不到接收者,说白了就是我们没有给人家回掉函数的定义,那么在脚本中定义该回掉函数吧!
OK,在场景中挂载该脚本,再次运行。
动画播放了,回掉函数也生效了!此时再实例特效就OK了。
那么开始第二种方法,我们可以对任意动画任意帧添加任意事件,貌似说的有点任性了。说的好像和真的一样,那就看看到底是不是真的。
在码代码之前,我们先去学习一个叫做AnimationEvent的东东。
了解这几个参数,我们就可以写代码了。
using UnityEngine;using System.Collections;public class TestAnimationEvent : MonoBehaviour{ /// <summary> /// 我们要添加事件的动画 /// </summary> public AnimationClip clip; public GameObject target; // Use this for initialization void Start() { AddAnimationEvent(); } /// <summary> /// 代码中自定义事件 /// </summary> public void AddAnimationEvent() { //创建动画事件 AnimationEvent animationEvent = new AnimationEvent(); //设置事件回掉函数名字 animationEvent.functionName = "GoToTarget"; //传入参数 animationEvent.objectReferenceParameter = target; //设置触发帧 animationEvent.time = 1.0f; //注册事件 clip.AddEvent(animationEvent); } /// <summary> /// 可视化添加动画帧事件 /// </summary> public void CallFuncation() { Debug.Log("Animation Event Triggered !"); } /// <summary> /// 代码添加回掉函数 /// </summary> /// <param name="go"></param> 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
阅读全文
0 0
- Unity3D动画帧事件
- unity3d 中动画的帧事件
- unity3d 中动画的帧事件
- unity3d 中动画的帧事件
- Unity3D AnimationView动画视图、动画事件
- Unity3d 中显示 Spine 动画节点 以及设置 帧事件
- Unity3D NGUI UIButtonTween动画事件详解
- unity3d legacy动画事件总是丢失
- unity3d之帧动画
- unity3d播放帧动画
- unity3d 关键帧控制动画
- Unity3D 动画 关键帧 FrameRate
- Unity3D~帧动画的制作
- Unity3d UGUI序列帧动画
- unity3d播放序列帧动画
- Unity3D NGUI UIPlayTween(原UIButtonTween)动画事件详解
- Unity3D新动画系统的事件的使用.
- Unity3D 新动画Animator的事件添加和使用
- redhat配置yum源
- 在java程序中设置http代理访问网络
- easyui的datebox控件如何只要年月
- Android消息推送认知
- mmap 访问DDR,加了 O_RDWR| O_SYNC,仍不能同步
- Unity3D动画帧事件
- substring和substr的区别
- 欢迎使用CSDN-markdown编辑器
- vs2017下linux远程调试经验
- Python-实现九宫格
- 使用 Azure CLI 2.0 从自定义磁盘创建 Linux VM
- TensorFlow与中文手写汉字识别
- 安装与卸载应用程序 (Package Installer)
- laravel错误1071 Specified key was too long; max key length is 1000 bytes