using UnityEngine; using UnityEngine.InputSystem; public class HeavyBallMovement : MonoBehaviour { [Header("References")] [SerializeField] private PlayerInput _playerInput; [SerializeField] private Rigidbody rb; [SerializeField] private Camera cam; [Space] [Header("Movement Parameters")] [SerializeField, Range(-100f, 100f)] private float moveSpeed; [Space] [Header("Grounded Settings")] [SerializeField] private LayerMask groundLayer; [SerializeField, Range(0f, 100f)] private float radius; [SerializeField, Range(0f, 100f)] private float maxDistance; [SerializeField, Range(0f, 100f)] private float groundDamping; [SerializeField, Range(0f, 100f)] private float airDamping; [Space] [Header("Bool Parameters")] [SerializeField] private bool isGrounded; RaycastHit hit; Vector2 currentInput; Vector3 moveDirection; private void Update() { HandleInput(); } private void FixedUpdate() { HandleMovement(); HandleGroundCheck(); } private void HandleMovement() { Vector2 input = Vector2.ClampMagnitude(currentInput, 1f); Vector3 camForward = cam.transform.forward; Vector3 camRight = cam.transform.right; camForward.y = 0f; camRight.y = 0f; camForward.Normalize(); camRight.Normalize(); moveDirection = camForward * input.y + camRight * input.x; moveDirection = moveDirection.normalized; rb.AddForce(moveDirection * moveSpeed, ForceMode.Force); } private void HandleGroundCheck() { isGrounded = (Physics.SphereCast(transform.position, radius, Vector3.down, out hit, maxDistance, groundLayer)); if (isGrounded) { rb.linearDamping = groundDamping; } else { rb.linearDamping = airDamping; } } private void HandleInput() { currentInput = _playerInput.moveAction.action.ReadValue<Vector2>(); } }