55 lines
1.6 KiB
C#
55 lines
1.6 KiB
C#
using UnityEngine;
|
|
using UnityEngine.InputSystem;
|
|
using UnityEngine.XR.Interaction.Toolkit;
|
|
|
|
public class GravityHandler : MonoBehaviour
|
|
{
|
|
public InputActionReference teleportAction;
|
|
public XRInteractorLineVisual TeleportRayLine;
|
|
public ActionBasedContinuousMoveProvider defaultGravity;
|
|
public bool isInSpace = false;
|
|
|
|
private void Awake()
|
|
{
|
|
teleportAction.action.Enable();
|
|
teleportAction.action.performed += OnTeleport;
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (isInSpace)
|
|
{
|
|
defaultGravity.useGravity = false; // Disable default gravity
|
|
}
|
|
else
|
|
{
|
|
defaultGravity.useGravity = true; // Enable default gravity
|
|
Physics.gravity = Vector3.down * 9.81f; // Reset to normal gravity
|
|
}
|
|
}
|
|
|
|
private void OnTeleport(InputAction.CallbackContext context)
|
|
{
|
|
if (isInSpace)
|
|
{
|
|
Quaternion newRotation = TeleportRayLine.reticle.transform.rotation;
|
|
Debug.Log("Teleport detected! Adjusting gravity... New rotation is: " + newRotation.eulerAngles);
|
|
//AdjustGravity(newRotation);
|
|
}
|
|
}
|
|
|
|
public void AdjustGravity(Quaternion rotation)
|
|
{
|
|
Vector3 newGravityDirection = rotation * Vector3.down; // Rotate gravity based on teleport direction
|
|
Physics.gravity = newGravityDirection.normalized * Physics.gravity.magnitude;
|
|
|
|
Debug.Log("New Gravity: " + Physics.gravity);
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
teleportAction.action.Disable();
|
|
teleportAction.action.performed -= OnTeleport;
|
|
}
|
|
}
|