如何在Animator组件的图层中获取当前状态的名称?我意识到我可以将名称与GetCurrentAnimatorStateInfo(0).IsName("statename")
进行比较,但我不想为我的图层中的每个州运行该名称。是否可以简单地获取当前状态的名称?
答案 0 :(得分:5)
我不认为这是可能的。我能想到的唯一好方法是使用switch
语句和nameHash
这样:
Animator animator = GetComponent<Animator>();
// Get the id of all state for this object
int runId = Animator.StringToHash("Run");
int jumpId = Animator.StringToHash("Jump");
AnimatorStateInfo animStateInfo = animator.GetCurrentAnimatorStateInfo(0);
switch (animStateInfo.nameHash)
{
case runId:
Debug.Log("Current state is Run");
break;
case jumpId:
Debug.Log("Current state is Jump");
break;
default:
Debug.Log("Current state is not in this list");
break;
}
答案 1 :(得分:0)
资产商店中有一个插件,可让您访问当前的州名称。它还可以用于使用自定义参数触发Animator状态上的事件,在场景中预览动画状态,更轻松地过滤状态等等!
答案 2 :(得分:0)
我们可以使用以下代码获取当前播放片段的名称
private Animator animator = GetComponent<Animator>();
private AnimatorClipInfo[] clipInfo;
public string GetCurrentClipName(){
clipInfo = animator.GetCurrentAnimatorClipInfo(0);
return clipInfo[0].clip.name;
}
注意:此代码已在统一版本2018.3中经过测试,因此我不确定该代码是否适用于先前版本。
答案 3 :(得分:0)
使用 AnimatorStateInfo.IsName(string name)
。
AnimatorStateInfo asi = GetComponent<Animator>().GetCurrentAnimatorStateInfo(0);
if(asi.IsName("Animation State Name"))
{
// Playing "Animation State Name" now.
}
答案 4 :(得分:0)
现在让我告诉你:这是不可能的。看到您打开的数百个标签了吗?他们都没有答案,因为你无法得到一个州的名字。期间。
但一切都没有丢失,开发人员,你很精明。您知道有一些解决方法。
AnimationClip[] clips = anim.runtimeAnimatorController.animationClips; //this gets all your clips in your animator. ALL.
for (int i = 0; i < clips.Length; i++){
print(clips[i].name); //you should create a list to store all of these.
}
Animator _aci = GetComponent<Animator>().GetCurrentAnimatorClipInfo(0);
List<theClassYouMadeForYourList> theListYouMade = new List <theClassYouMadeForYourList>(); //make sure you make a class for your list "theClassYouMadeForYourList"
for(int i = 0; i < theListYouMade.Count; i++){
if(theListYouMade[i] == _aci[0].clip.name){//is the list item equal to the current clip name? Then do something
print("doing something");
break;
}
}
我还没有测试过这个,但它应该可以工作。 ;)