When ever I press W my player doesn't move straight, Instead it will moves left, right, or backwards. Also when ever I replay the project, the direction the player moves will be randomized. Same including the A S D. (My code) Code (CSharp): using System.Collections; using System.Collections.Generic; using UnityEngine; using static scr_Models; public class Scr_CharacterController : MonoBehaviour { private CharacterController characterController; private DefaultInput defaultInput; private Vector2 input_Movement; private Vector2 input_View; private Vector3 newCameraRotation; private Vector3 newCharacterRotation; [Header("References")] public Transform cameraHolder; public Transform feetTransform; [Header("Settings")] public PlayerSettingsModel playerSettings; public float viewClampYMin = -70; public float viewClampYMax = 80; public LayerMask playerMask; [Header("Gravity")] public float gravityAmount; public float gravityMin; private float playerGravity; public Vector3 jumpingForce; private Vector3 jumpingForceVelocity; [Header("Stance")] public PlayerStance playerStance; public float playerStanceSmoothing; public CharacterStance playerStandStance; public CharacterStance playerCrouchStance; public CharacterStance playerProneStance; private float stanceCheckErrorMargin = 0.05f; private float cameraHeight; private float cameraHeightVelocity; private Vector3 stanceCapsuleCenterVelocity; private float stanceCapsuleHeightVelocity; private bool isSprinting; private void Awake() { defaultInput = new DefaultInput(); defaultInput.Character.Movement.performed += e => input_Movement = e.ReadValue<Vector2>(); defaultInput.Character.View.performed += e => input_View = e.ReadValue<Vector2>(); defaultInput.Character.Jump.performed += e => Jump(); defaultInput.Character.Crouch.performed += e => Crouch(); defaultInput.Character.Prone.performed += e => Prone(); defaultInput.Character.Sprint.performed += e => ToggleSprint(); defaultInput.Character.SprintReleased.performed += e => StopSprint(); defaultInput.Enable(); newCameraRotation = cameraHolder.localRotation.eulerAngles; newCharacterRotation = transform.localRotation.eulerAngles; characterController = GetComponent<CharacterController>(); cameraHeight = cameraHolder.localPosition.y; } private void Update() { CalculateView(); CalculateMovement(); CalculateJump(); CalculateStance(); } private void CalculateView() { newCharacterRotation.y += playerSettings.ViewXSensitivity * (playerSettings.ViewXInverted ? -input_View.x : input_View.x) * Time.deltaTime; transform.localRotation = Quaternion.Euler(newCharacterRotation); newCameraRotation.x += playerSettings.ViewYSensitivity * (playerSettings.ViewYInverted ? input_View.y : -input_View.y) * Time.deltaTime; newCameraRotation.x = Mathf.Clamp(newCameraRotation.x, viewClampYMin, viewClampYMax); cameraHolder.localRotation = Quaternion.Euler(newCameraRotation); } private void CalculateMovement() { if (input_Movement.y <= 0.2f ) { isSprinting = false; } var verticalSpeed = playerSettings.WalkingForwardSpeed; var horizontalSpeed = playerSettings.WalkingStrafeSpeed; if (isSprinting) { verticalSpeed = playerSettings.RunningForwardSpeed; horizontalSpeed = playerSettings.RunningStrafeSpeed; } var newMovementSpeed = new Vector3(horizontalSpeed * input_Movement.x * Time.deltaTime, 0, verticalSpeed * input_Movement.y * Time.deltaTime); newMovementSpeed = transform.TransformDirection(newMovementSpeed); if (playerGravity > gravityMin) { playerGravity -= gravityAmount * Time.deltaTime; } if (playerGravity < -0.1f && characterController.isGrounded) { playerGravity = -0.1f; } newMovementSpeed.y += playerGravity; newMovementSpeed += jumpingForce * Time.deltaTime ; characterController.Move(newMovementSpeed); } private void CalculateJump() { jumpingForce = Vector3.SmoothDamp(jumpingForce, Vector3.zero, ref jumpingForceVelocity, playerSettings.JumpingFalloff); } private void CalculateStance() { var currentStance = playerStandStance; if (playerStance == PlayerStance.Crouch) { currentStance = playerCrouchStance; } else if (playerStance == PlayerStance.Prone) { currentStance = playerProneStance; } cameraHeight = Mathf.SmoothDamp(cameraHolder.localPosition.y, currentStance.CameraHeight, ref cameraHeightVelocity, playerStanceSmoothing); cameraHolder.localPosition = new Vector3(cameraHolder.localPosition.x, cameraHeight, cameraHolder.localPosition.z); characterController.height = Mathf.SmoothDamp(characterController.height, currentStance.StanceCollider.height, ref stanceCapsuleHeightVelocity, playerStanceSmoothing); characterController.center = Vector3.SmoothDamp(characterController.center, currentStance.StanceCollider.center, ref stanceCapsuleCenterVelocity, playerStanceSmoothing); } private void Jump() { if (!characterController.isGrounded || playerStance == PlayerStance.Prone) { return; } if (playerStance == PlayerStance.Crouch) { playerStance = PlayerStance.Stand; return; } // Jump jumpingForce = Vector3.up * playerSettings.JumpingHeight; playerGravity = 0; } private void Crouch() { if (playerStance == PlayerStance.Crouch) { if (StanceCheck(playerStandStance.StanceCollider.height)) { return; } playerStance = PlayerStance.Stand; return; } if (StanceCheck(playerCrouchStance.StanceCollider.height)) { return; } playerStance = PlayerStance.Crouch; } private void Prone() { playerStance = PlayerStance.Prone; } private bool StanceCheck(float stanceCheckheight) { var start = new Vector3(feetTransform.position.x, feetTransform.position.y + characterController.radius + stanceCheckErrorMargin, feetTransform.position.z); var end = new Vector3(feetTransform.position.x, feetTransform.position.y - characterController.radius - stanceCheckErrorMargin + stanceCheckheight, feetTransform.position.z); return Physics.CheckCapsule(start, end, characterController.radius, playerMask); } private void ToggleSprint() { if (input_Movement.y <= 0.2f ) { isSprinting = false; return; } isSprinting = !isSprinting; } private void StopSprint() { isSprinting = false; } }
Your post is not related to the Editor so you're posting in the wrong forum. For scripting questions, you need to use the Scripting forum. Also, please use code-tags and not plain-text when posting code. You can edit your post above to use this. I'll move your post.