Exemplo n.º 1
0
    private bool IsGrounded()
    {
        float offsetCenter = 0.3f;
        float offsetHeight = 0.5f;
        float distance     = 0.6f;

        Vector3 tempV = Vector3.zero;
        Vector3 v     = new Vector3(transform.position.x, m_collider.bounds.min.y + offsetHeight, transform.position.z);

        for (int i = 0; i < 4; i++)
        {
            // Define ray
            switch (i)
            {
            case (0):
                tempV = new Vector3(transform.forward.x * offsetCenter, 0, transform.forward.z * offsetCenter);
                break;

            case (1):
                tempV = -tempV;
                break;

            case (2):
                tempV = new Vector3(transform.right.x * offsetCenter, 0, transform.right.z * offsetCenter);
                break;

            case (3):
                tempV = -tempV;
                break;

            default:
                break;
            }
            // Shoot ray
            if (Physics.Raycast(tempV + v, Vector3.down, out m_rayHit, distance, m_StandableLayers))
            {
                if (!CurrentMovementState.Equals(MovementState.Sliding))
                {
                    m_rigidbody.MovePosition(new Vector3(m_rigidbody.position.x, m_rayHit.point.y + m_collider.bounds.size.y / 2, m_rigidbody.position.z));
                }
                return(true);
            }
        }
        return(false);
    }
Exemplo n.º 2
0
    // Finds out what state the player is currently in
    private void DetermineState()
    {
        if (!CurrentMovementState.Equals(MovementState.Climbing))
        {
            if (IsGrounded())
            {
                if (!IsSliding())
                {
                    if (m_inputManager.MovingCharacter())
                    {
                        CurrentMovementState = MovementState.Moving;
                    }
                    else
                    {
                        CurrentMovementState = MovementState.Idle;
                    }
                }
                else
                {
                    CurrentMovementState = MovementState.Sliding;
                }

                m_controllerClimbing.State = ControllerClimbing.ClimbingState.NotClimbing;
                m_isGrounded = true;
                UsingGravity = false;
            }
            else
            {
                m_isGrounded = false;
                UsingGravity = true;
                if (m_rigidbody.velocity.y > 0)
                {
                    CurrentMovementState = MovementState.Jumping;
                }
                else
                {
                    CurrentMovementState = MovementState.Falling;
                }
            }
        }
    }