public class ZeroGravityZone : MonoBehaviour
{
    [Header("Gravity Settings")]
    public Vector3 zeroGravity = Vector3.zero;
    public Vector3 normalGravity = new Vector3(0, -9.81f, 0);

    [Header("Optional Force Dampening")]
    public bool dampenVelocity = true;
    public float dampenFactor = 0.95f; // 1 = no dampening, 0 = full stop

    [Header("Floating Force (Optional)")]
    public bool applyFloatingForce = false;
    public float floatingForce = 1f;

    private Rigidbody playerRb;

    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            playerRb = other.GetComponent<Rigidbody>();
            if (playerRb != null)
            {
                Physics.gravity = zeroGravity;
                Debug.Log("Entered zero gravity zone.");

                playerRB = null;
            }
        }
    }

    private void OnTriggerStay(Collider other)
    {
        if (other.CompareTag("Player") && playerRb != null)
        {
            if (dampenVelocity)
            {
                playerRb.velocity = dampenFactor;
            }

            if (applyFloatingForce)
            {
                playerRb.AddForce(Vector3.up floatingForce, ForceMode.Acceleration);
            }
        }
    }

    private void OnTriggerExit(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            if (playerRb != null)
            {
                Physics.gravity = normalGravity;
                Debug.Log("Exited zero gravity zone.");
            }
            playerRb = null;
        }
    }
}