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. 博主总算赶在这个月底写出了这篇文章.这个月由于期末考试一直没时间研究太多关于技术方面 ...
随机推荐
- 【计算机网络】wireshark抓包分析2
在分析1中,大概的看到了一个包中的信息.这里,看看这些包究竟在做什么 这是我的电脑跟某个网站交互的前4个包. 其中前三个包可以明显看出是TCP的三次握手. 那么,问题来了: 为什么第三个包的长度比前两 ...
- 《Java编程思想》笔记 第十五章 泛型
1 泛型 “泛型”意思就是适用于许多类型. 使用泛型的目的之一: 指定容器持有什么类型,让编译器确保正确性,而不是在运行期发现错误. 这个容器可以看成是有其他类型对象作为成员的类,而不单单只是JDK中 ...
- Python 进阶 之 socket模块
Python Socket 编程详细介绍 转载地址:https://gist.github.com/kevinkindom/108ffd675cb9253f8f71?signup=true Pytho ...
- 转怎么让VI支持中文显示
https://blog.csdn.net/kayneo/article/details/72957475
- python的垃圾回收机制和析构函数__del__
析构函数__del__定义:在类里定义,如果不定义,Python 会在后台提供默认析构函数. 析构函数__del__调用: A.使用del 显式的调用析构函数删除对象时:del对象名: class F ...
- css-demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Web CI过程中的Security解决方案
http://www.infoq.com/cn/articles/WebScan-CI 一. 当前Web应用安全现状 随着中国互联网金融的爆发和繁荣,Web应用在其中扮演的地位也越来越重要,比如Web ...
- C# 二维码扫描
Zint类用于产生二维码.https://sourceforge.net/projects/zint/ Zxing类用于读取二维码. https://github.com/zxing/zxing AF ...
- [转]iOS ARC机制 weak strong
写在开头 虽然距离WWDC2011和iOS 5已经快一年时间,但是很多开发者并没有利用新方法来提高自己的水平,这点在ARC的使用上非常明显(特别是国内,基本很少见到同行转向ARC).我曾经询问过一些同 ...
- JNI之数据类型
1. JNIEnv 作用 JNIEnv 概念 : 是一个线程相关的结构体, 该结构体代表了 Java 在本线程的运行环境 ; JNIEnv 与 JavaVM : 注意区分这两个概念; -- JavaV ...