Для проверки наличия перехода к анимации в Unity Animator, вы можете использовать метод IsInTransition и проверку на наличие состояния с помощью Animator.GetCurrentAnimatorStateInfo или Animator.GetNextAnimatorStateInfo. Вот пример, как это можно сделать:
using UnityEngine;
public class AnimationTransitionChecker : MonoBehaviour
{
public Animator animator;
public string targetAnimationName;
void Update()
{
if (CanTransitionTo(targetAnimationName))
{
animator.Play(targetAnimationName);
}
}
bool CanTransitionTo(string animationName)
{
AnimatorStateInfo currentState = animator.GetCurrentAnimatorStateInfo(0);
if (animator.IsInTransition(0))
{
AnimatorTransitionInfo transitionInfo = animator.GetAnimatorTransitionInfo(0);
return transitionInfo.IsName(animationName);
}
else
{
return currentState.IsName(animationName) || HasTransition(animationName, currentState);
}
}
bool HasTransition(string animationName, AnimatorStateInfo stateInfo)
{
AnimatorControllerParameter[] parameters = animator.parameters;
foreach (var parameter in parameters)
{
if (parameter.type == AnimatorControllerParameterType.Trigger)
{
animator.SetTrigger(
parameter.name );
if (animator.GetCurrentAnimatorStateInfo(0).IsName(animationName))
{
return true;
}
animator.ResetTrigger(
parameter.name );
}
}
return false;
}
}
Пояснение:
animator.IsInTransition(0) проверяет, находитесь ли вы в переходе.
animator.GetCurrentAnimatorStateInfo(0) возвращает информацию о текущем состоянии.
animator.GetAnimatorTransitionInfo(0) возвращает информацию о текущем переходе.
animator.Play(targetAnimationName) выполняет переход к нужной анимации, если это возможно.
Этот код проверяет, можно ли перейти к указанной анимации из текущего состояния, и если да, то выполняет переход.
ии