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. 博主总算赶在这个月底写出了这篇文章.这个月由于期末考试一直没时间研究太多关于技术方面 ...
随机推荐
- Linq 联合条件查询快捷方法
原方法: public ProductDC[] GetProductQueryCondition(ProductQueryConditionDC filter){//红色为原来的联合条件(之后下面的修 ...
- 取消SecureCRT的右击粘贴功能
默认为选中时自动复制,右键粘贴 要取消的话在: Options->Global Options ...->Terminal 里面有个Mouse的选项块. Paste on Right/Le ...
- 各种编码UNICODE、UTF-8、ANSI、ASCII、GB2312、GBK详解
来自:http://blog.csdn.net/lvxiangan/article/details/8151670 ------------------------------------------ ...
- HBuilder开发移动App——manifest.json文件解析
以前做过Android App开发,对于各项配置都是在AndroidManifest.xml文件中完成的,包括权限的设定.图标.标签.App的名字.Activity注册等等 使用HBuilder开发移 ...
- MATLAB中的符号运算
1. syms命令 可以替换sym和symfun,另外可以定义符号变量的类型,如 syms x positive; 限定x为正数. 若要取消这个限定,则可以用命令 syms x clear; ...
- [BZOJ3698] XWW的难题 网络流
3698: XWW的难题 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 533 Solved: 275[Submit][Status][Discus ...
- Windows server 2012 R2 环境搭建
由于系统升级,现在在用dotnetcore开发项目,但是尴尬的是服务器是windows server2012 R2的版本,这个版本不能执行dotnetcore. 然后问题来了,运行环境搭建. 第一步自 ...
- KO工作原理及带来的好处
介绍 Knockout是一个以数据模型(data model)为基础的能够帮助你创建富文本,响应显示和编辑用户界面的JavaScript类库.任何时候如果你的UI需要自动更新(比如:更新依赖于用户的行 ...
- Win10系统激活工具失败错误0xC004C003解决方法
用了几个WIN10的激活工具 都提示 错误0xC004C003 都原因就是这些CDKEY都被拉入了黑名单 鼠标左击屏幕左下角WIN图标,直接输入cmd,在弹出的 命令提示符 右击 以管理员运行(因为 ...
- HDU 6354.Everything Has Changed-简单的计算几何、相交相切圆弧的周长 (2018 Multi-University Training Contest 5 1005)
6354.Everything Has Changed 就是计算圆弧的周长,总周长=大圆周长+相交(相切)部分的小圆的弧长-覆盖掉的大圆的弧长. 相交部分小圆的弧长直接求出来对应的角就可以,余弦公式, ...