Files
RoomAwareVR/Assets/_Scripts/Utility/OVRStickMovement.cs

52 lines
1.4 KiB
C#

using System.Globalization;
using Unity.Netcode;
using UnityEngine;
[RequireComponent(typeof(CharacterController))]
public class OVRStickMovement : NetworkBehaviour
{
public float speed = 2.0f;
public float gravity = -9.81f;
public Transform cameraTransform;
private CharacterController characterController;
private Vector3 velocity;
void Start()
{
if (!IsOwner)
{
Debug.LogError("Ja, ich bin Owner!");
return;
}
characterController = GetComponent<CharacterController>();
if (cameraTransform == null && Camera.main != null)
cameraTransform = Camera.main.transform;
}
void Update()
{
if(!IsOwner) return;
// Linker Stick auslesen (PrimaryThumbstick)
Vector2 input = OVRInput.Get(OVRInput.Axis2D.PrimaryThumbstick);
// Bewegung relativ zur Kameraausrichtung
Vector3 move = cameraTransform.forward * input.y + cameraTransform.right * input.x;
move.y = 0; // keine vertikale Bewegung
move.Normalize();
characterController.Move(move * speed * Time.deltaTime);
// Gravity anwenden
velocity.y += gravity * Time.deltaTime;
characterController.Move(velocity * Time.deltaTime);
// Reset, wenn auf dem Boden
if (characterController.isGrounded)
{
velocity.y = 0f;
}
}
}