hi, chatgpt. can you please help me with my unity project, i want handle crouching state but a cant make raycast work as i want it to. there is my code snippet using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FPSController : MonoBehaviour
{
    [Header("Movement Speeds")]
    [SerializeField] private float _walkSpeed = 5.0f;
    [SerializeField] private float _sprintMultiplier = 2.0f;
    [SerializeField] private float _crouchingSpeed = 3.0f;

    [Header("Jump Parameters")]
    [SerializeField] private float _jumpForce = 5.0f;
    [SerializeField] private float _gravity = 9.81f;

    [Header("Crouch Parameters")]
    [SerializeField] private float _crouhingRaycastHeight = 1f;
    [SerializeField] private LayerMask _layersToHit;
    [SerializeField] private Transform _rayCastPoint;
    

    [Header("Camera Parameters")]
    [SerializeField] private float _mouseSensitivity = 1.0f;
    [SerializeField] private float _upDownClampRange = 89f;
    private Rigidbody _rigidbody;

    private CharacterController characterController;
    private Camera mainCamera;
    private PlayerInputHandler inputHandler;
    private Vector3 currentMovement;
    private float verticalRotation;


    private void Start()
    {
        characterController = GetComponent<CharacterController>();
        mainCamera = Camera.main;
        inputHandler = PlayerInputHandler.Instance;
        if (inputHandler == null)
        {
            Debug.LogError("Input handler is not set!");
        }
    }

    private void Update()
    {
        HandleMovement();
        HandleRotation();
        HandleJumping();
        HandleCrouching();
    }

    void HandleMovement()
    {
        float speed = _walkSpeed * (inputHandler.SprintValue > 0 ? _sprintMultiplier : 1f);

        Vector3 inputDirection = new Vector3(inputHandler.MoveInput.x, 0f, inputHandler.MoveInput.y);
        Vector3 worldDirection = transform.TransformDirection(inputDirection);
        worldDirection.Normalize();

        // Handling crouching
        if (inputHandler.CrouchTriggered)
        {
            currentMovement.x = worldDirection.x * _crouchingSpeed;
            currentMovement.z = worldDirection.z * _crouchingSpeed;
        }
        else
        {
            currentMovement.x = worldDirection.x * speed;
            currentMovement.z = worldDirection.z * speed;
        }
        characterController.Move(currentMovement * Time.deltaTime);
    }

    void HandleJumping()
    {
        if(characterController.isGrounded) 
        {
            currentMovement.y = -0.5f;

            if(inputHandler.JumpTriggered)
            {
                currentMovement.y = _jumpForce;
            }
        }
        else
        {
            currentMovement.y -= _gravity * Time.deltaTime;
        }
    }

    void HandleRotation()
    {
        float mouseXRotation = inputHandler.LookInput.x * _mouseSensitivity;
        transform.Rotate(0f, mouseXRotation, 0f);

        verticalRotation -= inputHandler.LookInput.y * _mouseSensitivity;
        verticalRotation = Mathf.Clamp(verticalRotation, -_upDownClampRange, _upDownClampRange);
        mainCamera.transform.localRotation = Quaternion.Euler(verticalRotation, 0f, 0f);
    }

    void HandleCrouching()
    {
        RaycastHit hit;
        if (characterController.isGrounded & inputHandler.CrouchTriggered)
        {
            characterController.height = 1f;
            
        }
        else if (!inputHandler.CrouchTriggered & !Physics.Raycast(transform.position, _rayCastPoint.transform.up, out hit, _crouhingRaycastHeight))
        {
            characterController.height = 2f;
        }
    }