Unity-Animator深入系列---fullPathHash和shortNameHash

回到 Animator深入系列总目录

Unity5对状态哈希做了改进,拆分成了fullPathHash和shortNameHash,那么就来看看他们有什么区别

测试结果:

fullPathHash支持嵌套子状态以及层,shortNameHash直接不支持路径

这是使用的测试状态机,一共三种状态

测试脚本:

public class A1 : MonoBehaviour
{
    public Animator animator;

    void OnGUI()
    {
        GUILayout.Box("Layer1 fullPathHash - " + (animator.GetCurrentAnimatorStateInfo(0).fullPathHash == Animator.StringToHash("Layer1.Idle")));
        GUILayout.Box("Layer1 Idle2 fullPathHash - " + (animator.GetCurrentAnimatorStateInfo(0).fullPathHash == Animator.StringToHash("Layer1.Group.Idle")));
        GUILayout.Box("Layer2 fullPathHash - " + (animator.GetCurrentAnimatorStateInfo(1).fullPathHash == Animator.StringToHash("Layer2.Idle")));

        GUILayout.Box("Layer1 shortNameHash - " + (animator.GetCurrentAnimatorStateInfo(0).shortNameHash == Animator.StringToHash("Idle")));
        GUILayout.Box("Layer1 Idle2 shortNameHash(1) - " + (animator.GetCurrentAnimatorStateInfo(0).shortNameHash == Animator.StringToHash("Group.Idle")));
        GUILayout.Box("Layer1 Idle2 shortNameHash(2) - " + (animator.GetCurrentAnimatorStateInfo(0).shortNameHash == Animator.StringToHash("Idle")));
        GUILayout.Box("Layer2 shortNameHash - " + (animator.GetCurrentAnimatorStateInfo(1).shortNameHash == Animator.StringToHash("Idle")));
    }
}

测试结果1(Layer1.Group.Idle未跳转):

测试结果2(Layer1.Group.Idle已跳转):

最终结论:

fullPathHash支持子状态以及层,shortNameHash直接不支持路径

时间: 2024-08-26 11:10:45

Unity-Animator深入系列---fullPathHash和shortNameHash的相关文章

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

Unity animator:StateMachineBehaviour的一点应用(施工中) 有什么用 直奔主题,我们先讲讲作用,用法,再慢慢解释 一个简单的应用场景:Unity动画状态机中有一个"特色"是,如果你为一组Animator添加一个triggerA的parameter,用于控制动画A的播放(这里我们举例triggerA触发一次,进入动画A播放一次),你会发现,快速出发两次或多次triggerA,不加入限制条件,动画A将再播放完后再播放一次或多次 已有的解决方案是在脚本中添加

Unity Animator动画状态机 深入理解(一)

接触Unity以来就已经有了Animator,Animation用的少,不过也大概理解他俩之间的一个区别于联系. 图中其实就是Animator和Animation之间的区别于联系了,啊!你肯定会告诉我这就不是Animator么. 对啊,Animator其实是由Animation组成的.比如在Animator没有出现的时候有些公司写的动画状态机其实就是代码版的Animator. Animator其实就是把Animation统一管理和逻辑状态管理的组件,而Animation就是每一个动画. 动画状态

【Unity】UGUI系列教程——拼接一个简单界面

0.简介: 在目前的游戏市场上,手游依然是市场上的主力军,而只有快速上线,玩法系统完善的游戏才能在国内市场中占据份额.而在手游开发过程中,搭建UI系统是非常基本且重要的技能,极端的说如果对Unity的UI系统熟悉,就可以去游戏公司上班了 :)(笑~). 但是就像蛋炒饭,最简单的事要做好也是非常困难的.UI这块的变动也经常是整个游戏最频繁的一块,如果没有一个合理的设计思路,和管理方案,后期将会陷入无止境的调试优化之中. 万丈高楼平地起,现在让我们开始从Unity中的UGUI系统进行讲解. 1.创建

unity, animator stateMachine立即触发状态转换

例如按下键jump按钮人物执行跳起动作,同时动画状态由idle转换为jump,同时打开Game窗口和Animator窗口对比观察,发现人物跳起时动画状态并没有同步发生转换,而是有一定延迟,导致人物动画与动作脱节.后来发现是由于Transition(idle->jump)面板中勾选了Has Exit Time造成的,把此勾去掉就同步了. 关于Has Exit Time参考:http://docs.unity3d.com/Manual/class-Transition.html

Unity Animator动画状态机 深入理解(二)IK控制

IK还是一个很神奇和实用的东西啊,起码可以用代码来控制人物骨骼位置还是很爽的.因为不是动画师~ 这篇可能跟Animator没啥关系了哈,都是代码层的. 看了一官方的案例,老的,有些问题,自己修改了一下,达到了效果. 官方建议把所有的IK操作放在OnAnimatorIK中进行. 如果我们要进行IK操作,先要绑定IK位置.IK能控制的官方都给了enum   然后我们要设置权重Weight,范围为0~1,这里都设成1 1 avatar.SetIKPositionWeight(AvatarIKGoal.

unity animator BlendTree1

好想骂人啊,终于解决了 问题 我使用blendtree让角色进行跑,向左转,向右转,跳跃的的功能,但角色其他动画播放正常,只要转向就在原地不动了 原因:动画播放完了就不动了,设置下loop属性就行了. 使用blendtree 1 动画如果只在原地运动,可以给动画添加运动曲线,(curves,在animation视窗中)然后给忽角色添加运动代码 OnAnimatorMove函数中 void OnAnimatorMove() { Animator animator = GetComponent<An

[Unity Asset]AssetBundle系列——游戏资源打包

转载:http://www.cnblogs.com/sifenkesi/p/3557231.html 将本地资源打包,然后放到资源服务器上供游戏客户端下载或更新.服务器上包含以下资源列表:(1)游戏内容资源assetbundle(2)资源维护列表,包含每个资源的名字(完整路径名)和对应的版本号[资源名,版本号],如下表所示(VersionNum.xml): <VersionNum> <File FileName="Assets.Resources.BigLevelTexture

Unity-Animator学习系列总索引

花了不少时间完成了这篇Unity Animator学习系列文章,其中API部分很多都是亲测.希望能对路过的博友有所帮助 相关参考文档 Unity Animator官方组件文档 Unity Animator官方脚本文档 圣典的部分汉化文档 Animator学习系列总目录 1.Unity-Animator学习系列---API 2.Unity-Animator学习系列---控制IK 3.Unity-Animator学习系列---剪辑播放后位置预判(Animator.Target) 4.Unity-An

Unity-Animator深入系列---StateMachineBehaviour初始化时间测试

回到 Animator深入系列总目录 结果有点出乎意料. MyClass public class MyClass { public MyClass() { Debug.Log("Init!"); } } TestSMB public class TestSMB : StateMachineBehaviour { public MyClass obj = new MyClass(); public override void OnStateMachineEnter(Animator a