Использование функции IsName
требует, чтобы вы указали префикс имени основного слоя состояния анимации перед фактическим состоянием анимации.
Базовое имя по умолчанию обычно «Базовый слой»
![enter image description here](https://i.stack.imgur.com/8CGiG.png)
if(!this.Anim.GetCurrentAnimatorStateInfo(0).IsName("Base Layer.Kick_Ball")
Обратите внимание, что вы должны делать это вне вашего if(input.GetMouseButtonDown(0)){
, иначе у вас никогда не будет шанса быть проверенным.
Я видел сообщения о том, что IsName
не работает для некоторых людей, поэтому, если вы делаете это, но у вас все еще есть проблемы, рассмотрите возможность сделать это по-другому.
void Update()
{
if (Input.GetMouseButtonDown(0))
{
if (!CharacterToController.activeSelf)
{
CharacterToController.SetActive(true);
}
Anim.Play("Kick_Ball");
StartCoroutine(PlayAndWaitForAnim(Anim, "Kick_Ball"));
}
}
const string animBaseLayer = "Base Layer";
int animHash = Animator.StringToHash(animBaseLayer + ".Kick_Ball");
public IEnumerator PlayAndWaitForAnim(Animator targetAnim, string stateName)
{
targetAnim.Play(stateName);
//Wait until we enter the current state
while (targetAnim.GetCurrentAnimatorStateInfo(0).fullPathHash != animHash)
{
yield return null;
}
float counter = 0;
float waitTime = targetAnim.GetCurrentAnimatorStateInfo(0).length;
//Now, Wait until the current state is done playing
while (counter < (waitTime))
{
counter += Time.deltaTime;
yield return null;
}
//Done playing. Do something below!
Debug.Log("Done Playing");
CharacterToController.SetActive(false);
CharacterToBeStopped.SetActive(true);
}