Пример #1
0
    private void Move()
    {
        if (state.CanMove() && input.Move.magnitude != 0.0f)
        {
            state.StartWalk();
            //Increase acceleration factor
            accelerationFactor = Mathf.Min(accelerationFactor + Time.deltaTime / m_AccelerationTime, input.Move.magnitude);

            Vector2 zero = Vector2.zero;
            moveDir = Vector2.SmoothDamp(moveDir, input.Move.normalized, ref zero, m_RotationDampeningFactor * m_AccelerationCurve.Evaluate(accelerationFactor));
        }
        else
        {
            Vector2 zero = Vector2.zero;
            state.EndWalk();
            //Decrease acceleration factor
            accelerationFactor = Mathf.Max(accelerationFactor - Time.deltaTime / m_AccelerationTime, 0.0f);

            Vector2 defaultDir = moveDir.x > 0.01f ? Vector2.right : Vector2.left;
            moveDir = Vector2.SmoothDamp(moveDir, defaultDir, ref zero, m_RotationDampeningFactor * m_AccelerationCurve.Evaluate(accelerationFactor));
        }

        //Facing
        if (moveDir.x > 0.01f)
        {
            facingRight = true;
        }
        else if (moveDir.x < -0.01f)
        {
            facingRight = false;
        }

        rb.velocity = moveDir * m_Speed * m_AccelerationCurve.Evaluate(accelerationFactor);
    }