transition状态下Mecanim动画的跳转
来自: http://blog.csdn.net/o_oxo_o/article/details/21325901
Unity中Mecanim里面动画状态的变化,是通过设置参数(Parameter)或者按照结束时间来转换的。但是如果当前状态处在两个状态的过度状态,单纯设置参数是实现不了动画的跳转的。今天上午我就碰到这种情况:

我想实现无论动画在Run状态还是RunJump状态都能通过玩家按Slide键使其转换到RunSlide(下滑)状态。
如上图所示(上图中RunJump到RunSlide通过参数Slide和Jump来控制,请注意Attack跟这两个状态是没有直接关系的)。角色当前处在从跑跳(RunJump)到跑(Run)的过渡状态(一般是角色跳起后下降到地面之后的那段时间),这个时候如果玩家想要Slide(应该执行RunSlide动画),会发现动作无法执行。
这也是为什么在处理动画跳转逻辑的时候我们往往加上(!theAnimator.IsInTransition(0)) 来回避这种状态。但这种方式应用在我今天碰到的情况是不行的,就像上面说的那样,这时候用户想Slide结果动画不能播放。更糟糕的情况是如果我们处理了玩家按Slide键时的碰撞体使其高度缩小(下滑状态的碰撞体高度应该缩小,这个在Unity Pro中是可以在Mecanim里面实现的,也就是说不需要我们另外在程序中手动修改碰撞体高度。Free版没有这个功能。),则玩家将看到角色碰到上方障碍物却没有结束游戏或者任何效果出现。
当然我们可以在处理碰撞体的高度的时候判断当前动画是否处在Transition状态,是的话我们不缩小高度。是的这样可以不至于让玩家看到碰到障碍物却没有任何影响的尴尬场景,但是还是没能解决玩家操作了角色使其下滑而角色却没有反应这个事实。
一个解决的方法就是当检测到用户按Slide键后,不论当前是否是Transition状态,在设置Slide=true后,我们通过Animator的Play函数强制让RunSlide动画执行起来,这样就可以实时响应玩家的下滑请求。
thisAnimator.SetBool(eventName, true);
if(eventName == "Slide")// && thisAnimator.IsInTransition(0))
thisAnimator.Play("RunSlide");
这里我本来是判断是否是在过渡状态,是的话才强制运行下滑动画。但是我后来发现除了过渡状态时转换不到RunSlide状态外,RunJump状态中当角色着陆的一瞬间也经常不能通过知识设置Slide(Animator.SetBool)为true来转到下滑动画。所以我让程序只要当用户选择了下滑就播放下滑动画。
transition状态下Mecanim动画的跳转的更多相关文章
- Unity3D之Mecanim动画系统学习笔记(九):Blend Tree(混合树)
认识Blend Tree 我们在Animator Controller中除了可以创建一个State外还可以创建一个Blend Tree,如下: 那么我们看下新创建的Blend Tree和State有什 ...
- Unity3D之Mecanim动画系统学习笔记(五):Animator Controller
简介 Animator Controller在Unity中是作为一种单独的配置文件存在的文件类型,其后缀为controller,Animator Controller包含了以下几种功能: 可以对多个动 ...
- Unity3d Mecanim动画系统Animator学习笔记
1. unity3d Mecanim学习 Unity3d新版动画系统网上的介绍很多,但多是流水笔记,外人很难看明白,后来我 终于找到介绍的比较明白的两个作者,特别感谢.一个是58开发网的乐天老师,课 ...
- u3d Mecanim动画
作为Unity4.0的主要更新功能,Mecanim动画被寄予了很多的期望.系统有先进的地方,也有不足的地方.这些我们留到最后再来总结. 阿赵粗略的学习了一下,写下以下的教程.这篇教程简单的说明了Mec ...
- Unity Mecanim 动画系统
1. Animator 组件 Controller:使用的Animator Controller文件. Avatar:使用的骨骼文件. Apply Root Motion:绑定该组件的GameObje ...
- Mecanim动画系统 - 在角色上使用Mask 叠加动画层
http://www.narkii.com/club/thread-305706-1.html 2013-10-9 01:15 上传 下载附件 (78.65 KB) 导读:五分钟了解Mecanim角色 ...
- Unity3D之Mecanim动画系统学习笔记(八):Animator Layers(动画分层)
解决什么问题? 动画分层可以用来解决什么样的问题呢?试想一下如果你要开发一款第三人称的射击游戏,那么肯定是希望身体的动画分为上下两部分,上方根据瞄准的位置和是否射击进行动画播放,下方根据移动播放动画. ...
- [Unity3D]Unity3D游戏开发之自己主动寻路与Mecanim动画系统的结合
大家好,欢迎大家关注我的博客,我是秦元培,我的博客地址是blog.csdn.net/qinyuanpei. 这段时间博主将大部分的精力都放在了研究官方演示样例项目上,主要是希望能够从中挖掘出有价值的东 ...
- [Unity3D]Unity3D圣骑士当游戏开发商遭遇Mecanim动画系统
大家好.我是秦培.欢迎关注我的博客.我的博客地址blog.csdn.net/qinyuanpei. 博主总算赶在这个月底写出了这篇文章.这个月由于期末考试一直没时间研究太多关于技术方面 ...
随机推荐
- poj 2264(LCS)
Advanced Fruits Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2158 Accepted: 1066 ...
- xunsearch: 开启后台服务,索引……随笔记录
重启后台服务: cd $prefix ; bin/xs-ctl.sh restart 索引: # 导入 MySQL 数据库的 dbname.tbl_post 表到 demo 项目中,并且平滑重建 ut ...
- luogu P1038借教室【Noip提高组2012】
这道题我读完题目的第一感觉是: 这不就是个线段树??用线段树维护区间最小值,检查是否满足订单要求即可判断. 对于修改操作直接在区间上进行. 据说会卡一卡线段树,但是貌似写一个懒标记,连zkw线段树都不 ...
- dutacm.club 1094: 等差区间(RMQ区间最大、最小值,区间GCD)
1094: 等差区间 Time Limit:5000/3000 MS (Java/Others) Memory Limit:163840/131072 KB (Java/Others)Total ...
- 33、Django实战第33天:我的消息
1.编辑usercenter-message.html继承usercenter-base.html 2.编辑users.views.py ... from operation.models impor ...
- 【BZOJ 2333 】[SCOI2011]棘手的操作(离线+线段树|可并堆-左偏树)
2333: [SCOI2011]棘手的操作 Description 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来有如下一些操作: U x y: 加一条边 ...
- Java杂谈3——类加载机制与初始化顺序
Java语言的哲学:一切都是对象.对于Java虚拟机而言,一个普通的Java类同样是一个对象,那如果是对象,必然有它的初始化过程.一个类在JVM中被实例化成一个对象,需要经历三个过程:加载.链接和初始 ...
- delphi模态窗口跑到后面的解决办法
Delphi(68) procedure TForm1.ShowForm2;begin Self.Enabled := False; try with TForm2.Create(ni ...
- VUE -- Vue.js每天必学之计算属性computed与$watch
在模板中绑定表达式是非常便利的,但是它们实际上只用于简单的操作.模板是为了描述视图的结构.在模板中放入太多的逻辑会让模板过重且难以维护.这就是为什么 Vue.js 将绑定表达式限制为一个表达式.如果需 ...
- Go 测试单个方法/性能测试
Go 测试单个方法 gotest.go package mytest import ( "errors" ) func Division(a, b float64) (float6 ...