Al configurar un disparador en Unity Animator, y la máquina de estado no está en un estado en el que pueda invocar el disparador, el disparador se "carga" y se activará en el momento en que pueda hacerlo. ¿Cómo puedo verificar si el disparador está configurado y cómo puedo desmarcarlo?
Solución del problema
Verificar si un activador determinado está configurado actualmente es más difícil de lo que pensaba ^^
Sin embargo, puede restablecer un disparador usando Animator.ResetTrigger
.
Exactamente para evitar su problema, una vez creé un script que simplemente restablece todos los desencadenantes cada vez que ingresa a un nuevo estado.
using System.Linq;
using UnityEngine;
public class ResetAllTriggers: StateMachineBehaviour
{
public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
foreach (var parameter in animator.parameters.Where(parameter => parameter.type == AnimatorControllerParameterType.Trigger))
{
animator.ResetTrigger(parameter.name);
}
}
}
Esto asegura que al comienzo de cada estado todos los disparadores se restablecen => Solo los disparadores establecidos durante el estado actual se manejan y nunca se almacenan para más adelante.
¡Para no tener que adjuntarlo a todos y cada uno de los estados, simplemente puede poner este comportamiento en la capa correspondiente de la máquina de estado! Entonces simplemente se invoca cada vez que llama cualquier estado OnStateEnter
.
Haga clic en la capa correspondiente en su AnimatorController, por ejemplo, elBaseLayer
Luego haga clic en Add Behavioury agregue el comportamiento de reinicio
Como puede ver, el disparador ahora se restablece cada vez que se ingresa un nuevo estado
No hay comentarios:
Publicar un comentario