关于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引擎,但在动画部分需要使用重定向技术来实现动画复用,考虑到有些项目开发人员没有过这方面的经 ...
随机推荐
- xilinx IP核配置,一步一步验证Xilinx Serdes GTX最高8.0Gbps
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010161493/article/details/77658599 目录(?)[+] 之前 ...
- Java 用栈实现队列
栈是先入后出,队列是先入先出.根据这个思想,可以用一个栈作为入队,另一个栈作为出队.只要把第一个栈的栈顶的元素压入第二个栈就好了,出队的时候输出第二个栈的栈顶,如果第二个栈的空了就需要不断操作从第一个 ...
- 新书《深入应用C++11:代码优化与工程级应用》出版,感谢支持
经过一年的编写,这本书终于和大家见面了, 已经由机械工业出版社出版,希望本书能给学习C++尤其是C++11的朋友们更多的帮助. 关于C++11 在StackOverflow的最近一次世界性调查中,C+ ...
- iOS开发-应用管理
// // ViewController.m // 21-应用管理-1 // // Created by hongqiangli on 2017/8/2. // Copyright © 201 ...
- 使用 "java -jar"命令启动jar包时报不支持的jdk版本异常
在使用java -jar 命令启动一个jar包的时候,提示版本不支持: [root@hadoop01 eureka-server-master]# java -jar xuebusi-eureka-s ...
- SPSS简单使用
当我们的调查问卷在把调查数据拿回来后,我们该做的工作就是用相关的统计软件进行处理,在此,我们以spss为处理软件,来简要说明一下问卷的处理过程,它的过程大致可分为四个过程:定义变量.数据录入.统计分析 ...
- 设计模式之工厂方法模式(代码用Objective-C展示)
前面一篇展示了一个简单工厂模式,这一篇主要是对比,工厂方法模式比简单工厂模式好在哪里?为什么要用这个模式?这个模式的精髓在哪里? 就以计算器为例,结果图如下: 加减乘除运算都是继承自基类运算类,然后工 ...
- mybatis中mysql和oracle的差异
1.applicationContext.xml中的配置差异: 在applicationContext.xml的数据源dataSource的配置中,mysql数据库需要心跳包的配置,而oracle中不 ...
- 轻量级Modal模态框插件cta.js
今天给大家分享一款轻量级Modal模态框插件cta.js.这是一款无需使用jQuery插件,纯js编写的模态框弹出特效.效果图如下: 在线预览 源码下载 实现的代码. html代码: <se ...
- VC/Wince 实现仿Win8 Metro风格界面2——页面滑动切换(附效果图)
前几天开始写仿Win8 Metro界面文章,部分网友觉得不错,感谢各位的意见.本来今天一直在折腾Android VLC播放器,没时间写.不过明天休息,所以今天就抽时间先写一下. 言归正传,我们都知道W ...