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