Paste
Of Code


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
using UnityEngine;
using UnityEngine.InputSystem;

public class BallController : MonoBehaviour
{

    [Header("References")]
    [SerializeField] Rigidbody rb;
    [Space]
    [Header("Movement Settings")]
    [SerializeField] private float moveSpeed;
    [SerializeField] private float jumpHeight;
    [SerializeField] private float airSpeed;
    [Space]
    [Header("Grounded Settings")]
    [SerializeField] private LayerMask groundLayer;
    [SerializeField] private float radius;
    [SerializeField] private float maxDistance;
    [SerializeField] private bool isGrounded;
    [Space]
    [Header("Slope Settings")]
    [SerializeField] private float maxSlopeAngle;
    [Space]
    [Header("Input Action References")]
    [SerializeField] private InputActionReference moveAction;
    [SerializeField] private InputActionReference jumpAction;

    
    private Vector2 currentInput;

    RaycastHit hit;
    private RaycastHit slopeHit;


    void Start()
    {
        Cursor.lockState = CursorLockMode.Locked;
        Cursor.visible = false;
    }

   
    void Update()
    {
        HandleInput();
        GroundCheck();
        HandleJump();
        
    }

    private void FixedUpdate()
    {
        HandleMovement();
        
    }


    

    private void HandleMovement()
    {
        
        Vector2 input = Vector2.ClampMagnitude(currentInput, 1f);

        
        Vector3 move = Vector3.forward * input.x + -Vector3.right * input.y;

        float currentSpeed = isGrounded ? moveSpeed : airSpeed;

        
        rb.AddForce(move * currentSpeed, ForceMode.Force);
    }


   

    private void HandleJump()
    {
        if (jumpAction.action.WasPerformedThisFrame() && isGrounded)
        {
            rb.AddForce(Vector3.up * jumpHeight, ForceMode.Impulse);
            rb.linearDamping = 0f;
        }
    }




    private void GroundCheck()
    {

        isGrounded = (Physics.SphereCast(transform.position, radius, Vector3.down, out hit, maxDistance, groundLayer));

        if (isGrounded)
        {
            rb.linearDamping = 3f;
         
        }
        else
        {
            rb.linearDamping = 0f;
        }
    }

    private void HandleInput()
    {
        currentInput = moveAction.action.ReadValue<Vector2>();
    }


}

Toggle: theme, font