0
\$\begingroup\$

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.

enter image description here

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".

enter image description here

Note: this is just a prototype and the states have no animations still.

\$\endgroup\$
  • 2
    \$\begingroup\$ Your transitions are set to take a quarter of a second, with the possibility that they can be interrupted according to valid transitions from the current state (ie. the state they are in the process of leaving). That means you haven't really left that state until some time after the transition started, which seems to be what you're observing in your log. Have you tried making your transitions instantaneous, if that's the behaviour you want? \$\endgroup\$ – DMGregory May 21 '20 at 22:58
  • \$\begingroup\$ This seems to resolve the issue, I always thought that these setting only works when "Has Exit Time" is checked on. \$\endgroup\$ – Venay May 22 '20 at 23:58
  • 1
    \$\begingroup\$ "HasExitTime" means it can only start the transition from a particular exit point in the source state. If you've solved your problem, want to write up your solution as an Answer below? \$\endgroup\$ – DMGregory May 23 '20 at 0:01
1
\$\begingroup\$

As @DMGregory pointed out, the Issue was that Transition Duration of 0.25 seconds which forced the state to hold until a quarter of a second passes.

Making the Transition duration zero solved the problem and now the state switches immediately.

enter image description here

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.