Animatorの現在state取得時のhashの違い
今回書くのは、nameHash と fullPathHash の違いについてです。
nameHashを使っていてそれは古いよ~fullPathHashを変わりに使いなよってワーニングが出たので調べてみました。
興味の無い方、もうわかってるよって方はお戻りくださいませ
結論から言いますとSub-state Machineを使う場合には値が変わってきます。
Sub-state Machineを使わない場合には
stateinfo.nameHash == Animator.StringToHash("Base Layer.name") stateinfo.fullPathHash == Animator.StringToHash("Base Layer.name")
のようにそれぞれのハッシュとレイヤー名.stateの名前のハッシュを比べます。
Sub-state Machineのハッシュを見る場合には
stateinfo.nameHash == Animator.StringToHash("Substate.name") stateinfo.fullPathHash == Animator.StringToHash("Base Layer.Substate.name")
のようにそれぞれのハッシュと
nameHash の方はSub-state Machineの名前.stateの名前
fullPathHash はレイヤー名.Sub-state Machineの名前.stateの名前
のハッシュを比べます
こちらhttp://unity-chan.com/download/releaseNote.php?id=UnityChanScriptPatch
を見る限り仕様変更のようですので後々nameHashの方は使えなくなるかもしれませんね。(公式の変更項目については目を通しておりません。すみません。)
最後にハッシュを確かめるために作ったスクリプトを貼っておきますね。
using UnityEngine; using UnityEngine.UI; public class anime : MonoBehaviour { [SerializeField]Text textobj; Animator ani; [SerializeField] string[] statename = new string [3] {"Base Layer.name","Substate.name","Base Layer.Substate.name"}; [SerializeField] int element; void Start () { ani = GetComponent<Animator>(); } void Update () { AnimatorStateInfo stateinfo = ani.GetCurrentAnimatorStateInfo(0); textobj.text = "fullPathHash="+stateinfo.fullPathHash+ "\nnameHash="+stateinfo.nameHash+ "\nStringToHash"+Animator.StringToHash( statename[element] ); } }