Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как проверить наличие перехода к анимации Animator в юнити?

Кирилл Гайчиков Ученик (138), на голосовании 4 месяца назад
Нужно в скрипте проверить возможно ли перейти к анимации от текущей. Если это возможно, то сделать это. В API смотрел, возможно я слепой, но я не нашёл связанных с проверкой наличия транзишна пунктов.
Голосование за лучший ответ
- Ученик (209) 5 месяцев назад
Для проверки наличия перехода к анимации в 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) выполняет переход к нужной анимации, если это возможно.
Этот код проверяет, можно ли перейти к указанной анимации из текущего состояния, и если да, то выполняет переход.


ии
Кирилл ГайчиковУченик (138) 5 месяцев назад
Спасибо
Похожие вопросы