Paste
Of Code


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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>();
    }
}

Toggle: theme, font