bool Grounded() { if (Physics.Raycast(transform.position, Vector3.down, m_moveSettings.m_DistanceToGround)) { playerStateManager.SetPlayerState(scr_PSM.Playerstate.state_grounded); } else { playerStateManager.SetPlayerState(scr_PSM.Playerstate.state_airborne); } return(Physics.Raycast(transform.position, Vector3.down, m_moveSettings.m_DistanceToGround)); }
public void Move(Vector3 move, bool crouch, bool jump, bool sliding, bool climbing, Vector3 lookPos, bool aim) { // 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; m_Left = move.x; this.isAiming = aim; this.isSliding = sliding; this.currentLookPosition = lookPos; this.isClimbing = climbing; if (!isAiming && m_PSM.GetPlayerState(true) == scr_PSM.Playerstate.state_grounded) { ApplyExtraTurnRotation(); } else if (isAiming) { // m_Player.transform.forward = Camera.main.transform.forward; // m_Player.transform.forward = new Vector3(Camera.main.transform.forward.x, m_Player.transform.forward.y, Camera.main.transform.forward.z); } Sliding(); // control and velocity handling is different when grounded and airborne: if (m_IsGrounded) { HandleGroundedMovement(crouch, jump); m_PSM.SetPlayerState(scr_PSM.Playerstate.state_grounded); m_PSM.SetPlayerPose(scr_PSM.PlayerPose.pose_running); } else if (m_PSM.GetPlayerPose(true) != scr_PSM.PlayerPose.pose_wallclimbing) { HandleAirborneMovement(); m_PSM.SetPlayerState(scr_PSM.Playerstate.state_airborne); } ScaleCapsuleForCrouching(crouch); PreventStandingInLowHeadroom(); JumpHandler(); // send input and other state parameters to the animator UpdateAnimator(move); }