关于Unity中如何立即中断动画然后重新开始播放
今天做一个FPS游戏的时候,用的是新版的动画系统,遇到一个问题。
就是用枪打敌人的时候,敌人会播放一个被击中的动画,但是如果在动画播放的过程中再射击敌人,敌人会先把第一个被击中的动画播放完,才再播放第二个被击中的动画。而且被击中后还原为正常形态也有点慢。
这样被枪打中的打击感就没有了,降低了FPS游戏的体验。
我理想中的效果是,当我用枪击中敌人,敌人播放被击中的动画,当我再开第二枪的时候,敌人能够停止第一枪的正在播放的被击中动画,重新开始播放被击中动画。如果我连续射中敌人,敌人就会有一个不断被击中的鬼畜的效果。
解决方案
思路:
我在动画状态机里面再创建一个一模一样的受伤的状态hurt2,然后设置一个伴随被击中次数不断累加的整型变量,当变量为单数时切换受伤状态1,变量为双数时切换受伤状态2,这就实现了立刻停止当前动画并重新开始播放动画的效果。而动画切换有点慢的话,可以不勾选状态和状态之间切换时的Transition的Has Exit Time,这样就不会有动画和动画之间过渡的那个的时间。如果一个动画有Conditions建议取消Has Exit Time,不然会出现无法及时触发的问题。Has Exit Time就是必须过度的时间,处于这个时间时,是不允许任何对动画的操作的。
动画状态机配置:
两个受伤动画之间过渡的Transition和walk与两个受伤动画之间的Transition配置:
当我们击中敌人时,调用敌人节点下的Enemy脚本里面的hurt函数:
public void hurt()
{
a++;
Debug.Log("打到怪物:"+a); if (a % != )
{
this.anim.SetInteger("anim_state", );//播放hurt动画
}
else if (a % == )
{
this.anim.SetInteger("anim_state", );//播放hurt2动画
} if (a >= )//怪物死亡,切换到3,播放死亡动画
{
this.anim.SetInteger("anim_state", );
}
}
敌人节点下的Enemy脚本里面的Update函数:
void Update () { AnimatorStateInfo info = anim.GetCurrentAnimatorStateInfo();
// 判断动画是否播放完成
if ((info.normalizedTime >= 1.0f && info.IsName("Base Layer.hurt")) || (info.normalizedTime >= 1.0f && info.IsName("Base Layer.hurt2")))
{
this.anim.SetInteger("anim_state", );//设置参数anim_state的值为0,我们之前也设置了当它等于0的时候会跳转
}
// 判断死亡动画是否播放完成
if (info.normalizedTime >= 1.0f && info.IsName("Base Layer.die"))
{
this.box.enabled = false;
this.anim.Stop();
MonoBehaviour.Destroy(this.gameObject);
a = ;
Debug.Log("删除怪物");
}
}
关于Unity中如何立即中断动画然后重新开始播放的更多相关文章
- 关于Unity中如何判断一个动画播放结束
方法一(强力推荐): 在动画结束帧或其他帧处加个动画事件,在播放到这一帧的时候会自动调用这个动画函数 如图,找到对应动画的inspector面板,在里面有个Events下拉条,下拉后在想要的帧的位置添 ...
- 关于Unity中NGUI的帧动画和Tween动画
帧动画 1.把三张帧动画的贴图png制作成图集,NGUI---->Open---->Atlas Maker,生成一个预制体,一个材质球,一个大图 2.创建一个Sprite类型的Sprite ...
- Unite 2018 | 《崩坏3》:在Unity中实现高品质的卡通渲染(下)
http://forum.china.unity3d.com/thread-32273-1-1.html 今天我们继续分享米哈游技术总监贺甲在Unite Beijing 2018大会上的演讲<在 ...
- 骨骼动画的原理及在Unity中的使用
制作骨骼动画 我们看看这几步操作后,我们得到了那些数据: 1.每个皮肤顶点的初始世界坐标. 2.每个骨骼关节顶点的初始世界坐标. 3.每个顶点被骨骼顶点的影响信息. 4.骨骼如何移动. 骨骼动画原理 ...
- 如何在unity中使用龙骨动画
龙骨 龙骨是Egret公司的一个用来做动画的软件,本文分享一下如何在Unity2D中使用龙骨导出的2D动画 导出动画 在龙骨中文件->导出,导出动画数据和纹理到Unity的项目中,如果打包了的话 ...
- 关于Unity中旧版动画系统的使用
Unity在5.X以后,有一个旧版的动画系统和新版的动画系统. 新版的动画系统是使用Unity动画编辑器来调的,调动画和控制动画 旧版的动画系统是用其他的第三方软件调好后导出到一个FBX文件里面,就是 ...
- 高速上手Unity中最好的补间动画插件DFTween
出处:http://blog.csdn.net/u010019717 author:孙广东 时间:2015.3.17 23:00 DFTween 是一个在 Unity 游戏引擎中高 ...
- unity中的动画制作方法
Unity中的动画制作方法 1.DOTween DoTween在5.0版本中已经用到了,到官网下载好插件之后,然后通过在项目中导入头using DG.Tweening;即可. 一些常用的API函数 D ...
- 动画重定向技术分析和Unity中的应用
http://www.jianshu.com/p/6e9ba1b9c99e 因为一些手游项目需要使用Unity引擎,但在动画部分需要使用重定向技术来实现动画复用,考虑到有些项目开发人员没有过这方面的经 ...
随机推荐
- 1. Apache Axis2 下载安装入门
Apache Axis2 /Java 学习手册 by 星云 0x01 什么是Apache Axis2/Java? Apache Axis2™ 是一个Web Service / SOAP / WSD ...
- Linux学习笔记(九)
<span style="font-size:18px;">本人使用的是centos 因为用使用些特殊命令.不得不改动系统的时间这里总结例如以下: date 查看系统时 ...
- C++编程学习50个经典网站 强力推荐(转载)
转自:http://blog.csdn.net/microzone/article/details/6684436 C/C++是最主要的编程语言.这里列出了50名优秀网站和网页清单,这些网站提供c/c ...
- 菜鸟学SSH(一)——Struts实现简单登录(附源码)
从今天开始,一起跟各位聊聊java的三大框架——SSH.先从Struts开始说起,Struts对MVC进行了很好的封装,使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时 ...
- Java虚拟机(JVM)概述
JVM(Java虚拟机)是一个抽象的计算模型.就如同一台真实的机器,它有自己的指令集和执行引擎,可以在运行时操控内存区域.目的是为构建在其上运行的应用程序提供一个运行环境.JVM可以解读指令代码并与底 ...
- AWS产品目录
计算 Amazon EC2:弹性虚拟机 AWS Batch:批处理计算 Amazon ECR:Docker容器管理 Amazon ECS:高度可扩展的快速容器管理服务 Amazon EKS:在AWS上 ...
- [Windows Azure] Building worker role A (email scheduler) for the Windows Azure Email Service application - 4 of 5.
Building worker role A (email scheduler) for the Windows Azure Email Service application - 4 of 5. T ...
- 【转】MySQL查看表占用空间大小(转)
//先进去MySQL自带管理库:information_schema //自己的数据库:rokid_cas_music_test //自己的表:data_song_thirdparty mysql&g ...
- JAVA-JSP内置对象之pageContext对象取得不同范围属性
相关资料:<21天学通Java Web开发> pageContext对象取得不同范围属性 pageContextDemo.jsp <%@ page language="ja ...
- C#学习笔记(23)——C#将PPT批量转为JPG(aspose方法)
说明(2017-7-31 18:30:25): 1. 最主要的是下载到aspose的破解文件,我在这里下载的http://www.lenosoft.net/down/10205.htm,如果不差钱可以 ...