示例#1
0
        public void Move(Vector3 move, bool crouch, bool jump)
        {
            // convert the world relative moveInput vector into a local-relative
            // turn amount and forward amount required to head in the desired
            // direction.
            if (move.magnitude > 1f)
            {
                move.Normalize();
            }
            move = transform.InverseTransformDirection(move);
            CheckGroundStatus();
            move            = Vector3.ProjectOnPlane(move, m_GroundNormal);
            m_TurnAmount    = Mathf.Atan2(move.x, move.z);
            m_ForwardAmount = move.z;

            if (_hanging)
            {
                if (m_Animator.GetCurrentAnimatorStateInfo(0).fullPathHash == _hashStateHangIdle)
                {
                    if (jump)                      //drop from hanging
                    {
                        _hangHandler.HangToDrop();
                    }
                    else if (m_ForwardAmount > 0)                        //climb from hanging
                    {
                        _hangHandler.HangToClimb();
                    }
                }
            }
            else                //turn when not hanging
            {
                ApplyExtraTurnRotation();
            }

            // control and velocity handling is different when grounded and airborne:
            if (m_IsGrounded)
            {
                HandleGroundedMovement(crouch, jump);
            }
            else if (!_hanging)
            {
                HandleAirborneMovement();
            }

            ScaleCapsuleForCrouching(crouch);
            PreventStandingInLowHeadroom();

            // send input and other state parameters to the animator
            UpdateAnimator(move);
        }
示例#2
0
 void hangToDrop()
 {
     _hangHandler.HangToDrop();
 }