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); }
void hangToDrop() { _hangHandler.HangToDrop(); }