求助!Unity中Animator的Getcurrentanimatorstateinfo().IsName()的用法~

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求助!Unity中Animator的Getcurrentanimatorstateinfo().IsName()的用法~相关的知识,希望对你有一定的参考价值。

我用IsName判断当前动画时返回给我的总是Falsh

检查了半天发现只有传参Entry下第一个动画的名字才给我返回True

是我对InName的理解错了吗

参考技术A 这个方法是获取当前正在播放的动画信息并判断是否名字为()
比如,......isName("idle")代表判断是否正在播放动画“idle”追问

问题自己解决了 分还是给你吧 当时犯的错误是在用个变量在Awake把Getcurrentanimatorstateinfo保存了下来 所以是有第一个动画返回true 在update里就没事了

本回答被提问者和网友采纳

Unity - Animator组件

Animator组件

Animator 是 Unity 中动画控制器的组件,相当于一个动画片段管理器。

我们知道在 Unity 中素材可以拖拽到游戏对象上,制作成称为 Clip 的动画片段,

如果该对象上没有 Animator 组件,那么也会同时创建 Animator 用来管理 Clip 的切换和触发等操作。

角色的多向动画

当控制一个2D角色(或3D角色)时,需要四个方向的移动动画,还需要四个方向的攻击动画。

之前想的可能是:制作8个 State,分别处理8段动画,然后在脚本代码中来回切换,就会出现密密麻麻的 State Transition

而 Blend Tree 可以很好的解决这个问题。

Blend Tree(混合树) 用于允许通过按不同程度组合所有动画的各个部分来平滑混合多个动画。

在一个 State 上创建一个新的 Blend Tree,然后双击进入。在 Animator 的参数面板中添加两个 float 变量x和z。

在 Inspector 面板中选择 Blend Type 2D simple directional,选择参考变量。

这时下面会出现一个 Motion 数组,在里面分别设置图中四个点的坐标和四个动画片段。

技术图片

 变量x和z用来表示角色的朝向,我们会在代码中进行设置。

Blend Tree 的神奇之处就在于,它能够根据你所设定的不同值的组合,去寻找相对应的 Motion

技术图片

 检测动画的播放状态

制作一个死亡动画不是问题,但是死亡之后如何判定动画是否播放完毕,然后进行处理?

比如现在要求死亡动画播放完之后,角色保持在死亡的那一帧,禁止播放其他动画。

首先是 Add Animation Event(添加动画事件):

在 Animation 面板,选择需要监听的动画片段,选中触发的关键帧,

右键添加动画事件,然后选择所需要触发的函数就可以了。

技术图片

这样动画播放到这一帧的时候,就会触发所选择的函数了。

然后就是 State Machine Behavior

选中一个 State 之后,在 Inspector 面板中点击 Add Behavior 添加一个状态机脚本。

技术图片

进入脚本,这里面最常用的三个函数分别是 EnterUpdateExit 函数。

分别是进入状态、更新状态和退出状态的时候会调用的函数。

在死亡状态后面新建一个状态,设置死亡动画播放完以后 Exit time 形式进入这个状态。

在刚添加的脚本中添加代码:

1     override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
2     {
3         animator.enabled = false;
4     }

这样角色死亡动画播放完以后,会自动切换到一个空状态,切入之前会调用这个Exit函数,将动画控制器禁用。

以上是关于求助!Unity中Animator的Getcurrentanimatorstateinfo().IsName()的用法~的主要内容,如果未能解决你的问题,请参考以下文章

Unity - Animator组件

Unity中获取Animator中动画片段的时长

unity animator 怎么判断动画正在播放

Unity游戏教程初步:Animator的使用

unity 对Animator动画系统的研究

Unity animator:StateMachineBehaviour的一点应用(施工中)