private void ExecuteMovement() { m_isGrounded = m_characterController.isGrounded; if (m_moving) { this.transform.eulerAngles = new Vector3(transform.eulerAngles.x, m_camera.transform.eulerAngles.y, transform.eulerAngles.z); } if (m_isGrounded && !m_shouldSlide) { m_moveDirection[1] = 0; } if (m_isGroundedRaycast) { if (m_jumping) { m_jumping = false; } if (!m_wallJumping) { m_moveDirection = new Vector3(m_horizontalInput, m_moveDirection.y, m_verticalInput); } m_moveDirection = Vector3.ClampMagnitude(m_moveDirection, 1); if (Mathf.Abs(m_horizontalInput) == 1f && Mathf.Abs(m_verticalInput) == 1f) { m_moveDirection.Normalize(); } m_moveDirection = transform.TransformDirection(m_moveDirection); m_moveDirection *= m_speed; if (InputManager.Instance.AButton) { m_moveDirection.y = m_jumpSpeed; m_jumping = true; } } else { m_moveDirection = new Vector3(m_horizontalInput, m_moveDirection.y, m_verticalInput); m_moveDirection = transform.TransformDirection(m_moveDirection); m_moveDirection.x *= m_speed; m_moveDirection.z *= m_speed; } if (m_isGroundedRaycast && m_groundHitAngle > 20 && !m_jumping) { m_moveDirection[1] = -20.0f; } m_moveDirection.y -= m_gravity * Time.deltaTime; m_characterController.Move(m_moveDirection * Time.deltaTime); m_cameraScript.ExecuteMovement(); if (!m_sliding && !m_shouldHoldOntoLedge) { m_lookDirection = m_moveDirection; } if (m_moving) { transform.rotation = Quaternion.LookRotation(new Vector3(m_lookDirection.x, 0, m_lookDirection.z) * Time.deltaTime, Vector3.up); } Quaternion tilt = Quaternion.FromToRotation(Vector3.up, m_groundHit.normal); if (m_shouldSlide) { transform.Translate(new Vector3(0, 0.1f, 0) - transform.forward); } }