first of all this is my code, I’m prototyping a state machine using Unity Animator (First Time) and I’m stuck coding a simple burst of speed.
using UnityEngine;
using UnityEngine.AI;
[CreateAssetMenu(fileName = "Dash", menuName = "States/Dash")]
class Dash : State
{
NavMeshAgent agent;
[SerializeField] float Speed = 50;
[SerializeField] float Distance = 1;
float oldSpeed,counter, duration;
public override void onStart(Animator animator, AnimatorStateInfo stateInfo)
{
agent = animator.GetComponent<NavMeshAgent>();
duration = Distance / Speed;
oldSpeed = agent.speed;
agent.speed = Speed;
counter = 0;
}
public override void onUpdate(Animator animator, AnimatorStateInfo stateInfo)
{
counter += Time.deltaTime;
Debug.Log(counter + " of " + duration);
if(counter > duration)
{
Debug.LogError("Dash is finished");
agent.speed = oldSpeed;
animator.SetBool("isDashing", false);
}
}
public override void onExit(Animator animator, AnimatorStateInfo stateInfo)
{
}
}
The issue is that the player standstill for few second after dashing. So I’ve added some debug.log and this is the result.
As you can see, the state keeps updating even tho the timer has ran up. It even keeps updating after switching to “Idle” state, tho this ends at some point. I’ve made sure that all transitions have “Has Exit Time” checked off and the Interruption Source = “Current State”.
note this is just a prototype and the states have no animations still.