前几天在项目开发中碰到一个这样的需求,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 initializationvoid 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

Unity3D动画帧事件相关推荐

  1. U3D 动画帧事件问题

    测试版本U3D5.4. 1,为一个模型导入外部动画.为动画剪辑attack在某帧添加event,事件为 public void OnAttackEvent(){},函数体不做任何事情. 结果发现,在动 ...

  2. Unity动画☀️动画帧事件

    目录 ​编辑

  3. unity开宝箱动画_[技术博客]Unity3d 动画控制

    在制作游戏时,导入的箱子模型本身自带动画.然而,它的动画是一个从打开到关闭的完整过程,并且没有给出控制打开关闭的方法. 最直接的想法是对该动画进行拆分,再封装成不同的动画状态,但是不巧的是,这个动画被 ...

  4. U3D Animator 组件控制动画的播放暂停,动态添加帧事件

    //顺便说一句,U3D的动画编辑器有BUG,添加关键帧事件后选了函数会说不支持,其实是可以用.运行下看结果来定吧. //大家好我是笨笨,笨笨的笨,笨笨的笨,谢谢! //20150810 by Jerr ...

  5. 实习小白::(转) Cocos2d-x 3.0开发(十三)使用CocoStudio编辑帧事件并关联到程序...

    1.概述 帧事件也是新加入的功能.这篇中我们将看到如何使用它.我们将上篇中制作的动画稍加修改.有图为证: 2.用途与原理 首先介绍一下帧事件.正如其名:一个与帧相关联的事件. 为什么要这么做呢?首先没 ...

  6. Unity3d动画脚本 Animation Scripting

    Unity3d动画脚本 Animation Scripting(深入了解游戏引擎中的动画处理原理) 也许这一篇文章的内容有点枯燥,但我要说的是如果你想深入的了解游戏引擎是如何处理动画片断或者素材并 让 ...

  7. 4.Unity2D 横版 帧事件+攻击判定+冲砍挑飞+更真实的打击

    总目录 1.攻击碰撞盒的创建 在玩家下面新建两个空物体命名为攻击一和攻击二.然后为两个物体分别添加碰撞盒,根据帧动化来调整碰撞盒位置.并都打开触发器 为俩个攻击盒添加触发器事件 using Syste ...

  8. Unity3D 动画控制器 Animator Component

    文章目录 Animator 组件 Animator Controller 动画控制器 自建状态 1.右键菜单 2.在状态上右键 3.Animator Layers 4.Animator Pameter ...

  9. CocosCreator 监听龙骨绑定的帧事件

    监听龙骨绑定的帧事件 简介 龙骨部分 CocosCreator 项目设置 CocosCreator 添加监听代码 简介 在龙骨中的Armature上绑定了一些帧事件,但是在CocosCreator中监 ...

最新文章

  1. 2021年大数据ELK(五):Elasticsearch中的核心概念
  2. 【BJDCTF 2nd—MISC/Crypto】做题+复现记录
  3. Android中的APK,TASK,PROCESS,USERID之间的关系
  4. EntityModelStudio系列教程2--静态建模之实体模型设计
  5. php 路径有汉字,路径文字工具
  6. 如何pspice模型转成saber模型
  7. python 发送邮件附件很慢_Python SMTP 发送带附件电子邮件
  8. 在logback、log4j等日志输出工具中输出java异常调用堆栈
  9. vue 2.0 使用 Font Awesome
  10. kafka 拉取的数据排序_Kafka 源码解析之 Consumer Poll 模型(七)
  11. 第一周学习前端html的知识总结与感悟
  12. ICML 2020 | SCAFFOLD:联邦学习的随机控制平均
  13. html左侧悬浮音乐插件,固定在网页底部的HTML5音乐播放器插件代码
  14. **最新2018手机号码正则表达式**
  15. java取模数,Java中的模数
  16. win10+ubuntu18.04安装+sougou输入法
  17. 年薪170万程序员在线征婚为什么会遭嘲讽?
  18. ArrayList的add方法详解——让我们好好看看一个元素是如何插入到ArrayList集合当中(源码级别)
  19. 反恐精英枪王对决 服务器维护6,反恐精英之枪王对决
  20. mysql设置最大使用内存_设置MySQL使用大内存页面

热门文章

  1. NPOI 操作Excel学习总结
  2. 论文笔记:Dynamic GCN: Context-enriched Topology Learning for Skeleton-based Action Recognition
  3. 怎么设置系统消息免打扰,看这里就够了,WIN10系统如何设置系统消息免打扰
  4. 云原生IDE:iVX首个通用且强大无代码开发平台
  5. 一小时建立终生受用的阅读操作系统-笔记
  6. 拼多多 标题 html,拼多多的创意图和创意标题怎么测试?为什么要测试?怎样测试呢?...
  7. python图片转素描风
  8. 安卓和IOS时间解析时间格式不一致的问题
  9. 华为交换机系统版本升级(S7706)
  10. 山东省农村信用计算机社考试,山东省农村信用社计算机专业考试题