public virtual void updateStage()
    {
        #region update navmesh agent

        // Move agent to coverPoint.
        if (!m_navMeshAgent.pathPending)
        {
            Vector3 velocity = m_navMeshAgent.desiredVelocity;

            if (!m_enableRun)
            {
                velocity = velocity.normalized;
            }
            else
            {
                velocity = velocity * 1.5f;
            }

            velocity = new Vector3(velocity.x, 0, velocity.z);
            m_selfAgent.moveCharacter(velocity);
        }
        #endregion

        #region Step update Logic
        if (m_timeFromLastStep > m_stepIntervalInSeconds)
        {
            m_timeFromLastStep = 0;
            stepUpdate();
        }
        else
        {
            m_timeFromLastStep += Time.deltaTime;
        }
        #endregion
    }