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来转到下滑动画。所以我让程序只要当用户选择了下滑就播放下滑动画。

时间: 2024-08-09 05:25:19

transition状态下Mecanim动画的跳转的相关文章

Unity3D之Mecanim动画系统学习笔记(五):Animator Controller

简介 Animator Controller在Unity中是作为一种单独的配置文件存在的文件类型,其后缀为controller,Animator Controller包含了以下几种功能: 可以对多个动画进行整合: 使用状态机来实现动画的播放和切换: 可以实现动画融合和分层播放: 可以通过脚本来对动画播放进行深度控制: 下面我们通过一个图来直观的看看动画的组成结构: Animator组件用来控制人物动画的播放,其中需要的两个最核心的内容就是控制动画播放逻辑的Animator Controller以

Unity3D之Mecanim动画系统学习笔记(九):Blend Tree(混合树)

认识Blend Tree 我们在Animator Controller中除了可以创建一个State外还可以创建一个Blend Tree,如下: 那么我们看下新创建的Blend Tree和State有什么区别: 唯一的区别就是Montion指向的类型变成了Blend Tree类型,那么一个Blend Tree其实也就是一个状态,和状态不同的地方就是一个状态只能设定一个动画,而一个Blend Tree则可以设定为多个动画的混合. 混合树是Mecanim动画系统中比较复杂的一个内容,且其分为多个维度,

u3d Mecanim动画

作为Unity4.0的主要更新功能,Mecanim动画被寄予了很多的期望.系统有先进的地方,也有不足的地方.这些我们留到最后再来总结. 阿赵粗略的学习了一下,写下以下的教程.这篇教程简单的说明了Mecanim系统的用法和控制方式,里面用到的资源,是从AssetStore里面下载的,如果有兴趣的朋友可以去免费下载. 学习目标: 我预先准备了几个没有带动画的3d模型,fbx格式,然后一些导出好的动画文件. 我们要做的事情,就是使用新的动画系统,把这些动画做出状态机,赋予给这些没有动画的模型.这样得到

Unity3d Mecanim动画系统Animator学习笔记

1. unity3d Mecanim学习  Unity3d新版动画系统网上的介绍很多,但多是流水笔记,外人很难看明白,后来我 终于找到介绍的比较明白的两个作者,特别感谢.一个是58开发网的乐天老师,课程 视频网址:http://www.58kaifa.com/course/24, 这是一个免费的视频课程,讲解的 很仔细,很清除.另一个是博客园的 阿诚de窝,文章地址:http://www.cnblogs.com/hammerc/category/647246.html, 各个控制面板上的参数含义

Mecanim动画系统(二)

一.导入模型         导入资源之后,找到模型进行相关的设置: 1.Rig ● Animation Type: Legacy:适于旧版的动画模型: Generic:适于新版的动画模型: Humanoid:适于人物模型: ● Avatar Definition:(获取Avatar的方式) Create From This Model:从模型中创建: Copy From Other Avatar:从其他Avatar中复制: ● optimize game obje:提升Mecanim动画模块的

Mecanim动画系统(三)

一.初识Blend Trees(混合树) ● 混合树 用于两个或多个类似动画的融合.如从walk到run的速度的变化,或在奔跑的时候向左.向右的倾斜角度. ● 2D Simple Directional(简单的定向): 表示在二维每个空间方向只能有一个动作 最适用于当你的动作片段代表不同方向时,如"向前行走"."向后行走"."向左行走"和"向右行走"或是"向上瞄准"."向下瞄准".&qu

Unity3D之Mecanim动画系统学习笔记(八):Animator Layers(动画分层)

解决什么问题? 动画分层可以用来解决什么样的问题呢?试想一下如果你要开发一款第三人称的射击游戏,那么肯定是希望身体的动画分为上下两部分,上方根据瞄准的位置和是否射击进行动画播放,下方根据移动播放动画.最好的例子就是Unity4.x自带的示例AngryBots了. Avatar Mask 下面我们就使用Avatar Mask来实现人物在奔跑中招手的效果. 我们先添加一个人物到场景,同时为其添加一个Animator Controller并设定好跳转条件,如下: 接下来我们添加下面的脚本来控制动画的播

[Unity3D]Unity3D游戏开发之自己主动寻路与Mecanim动画系统的结合

大家好,欢迎大家关注我的博客,我是秦元培,我的博客地址是blog.csdn.net/qinyuanpei. 这段时间博主将大部分的精力都放在了研究官方演示样例项目上,主要是希望能够从中挖掘出有价值的东西分享给大家.这样博主和大家能够共同学习.好了,那么今天博主想和大家分享的是自己主动寻路与Mecanim动画系统结合起来实现的一个小案例,希望对大家学习Unity3D能够有所帮助. 博主以前告诉大家.博主是一个仙剑迷,平时学习编程累了的时候,博主就会玩玩仙剑.如图是博主偶尔回去玩玩的<新仙剑OL>

Unity 3D游戏开发Mecanim动画系统讲解

本期教程和大家分享Mecanim动画系统的重定向特性,Mecanim动画系统是Unity3D推出的全新的动画系统,具有重定向.可融合等诸多新特性,通过和美工人员的紧密合作,可以帮助程序设计人员快速地设计出角色动画.一起跟着人气博主秦元培学习吧! 博主今天想和大家分享的是Mecanim动画系统的重定向特性,众所周知,<仙剑奇侠传>是一部经典的RPG游戏,这部游戏到今天依然焕发着强大的生命力.博主在网上认识了一个制作<仙剑奇侠传>同人游戏的小团队,他们目前正在着手制作一个称为<仙