在Unity OpenXR环境下,如何将玩家位置重置为中心?

问题描述 投票:0回答:2

我们正在为研究生院创建一款游戏。我正在 VR 上 Unity 制作一款飞行射击游戏。

问题在于将玩家(飞机)位置重置为当前玩家的真实位置。

目前,我的玩家对象的结构是...

Player
    > XR Origin
        > Camera Offset
            > VR Camera
            > controllers.. etc
    > Aircraft Model

Hierarchy Capture Image

我尝试重置位置。

但是很多教程都不是飞行游戏,并且大多数教程都是重新居中准备好的变换的位置。

我想回到当前玩家的真实位置(在 VR 中)。

我知道可以在虚拟现实的内置功能中重新定位。 但我想在统一运行时重新定位。

有人有解决办法吗?或者是否有任何方法可以在运行时调用以使用 vr 的内置函数重新调整位置?

我使用Unity 2022.2.19f、OpenXR包、Oculus Quest 2(我不像OVR那样直接使用Oculus SDK...)

抱歉我的英语水平很差..因为我是韩国人..:<

c# unity-game-engine virtual-reality oculus openxr
2个回答
0
投票

主相机 --> 头部

XR 原点 --> 原点

中心位置所需的对象 --> 目标

public class ReCenterXROrigin : MonoBehaviour
{
   public Transform head;
   public Transform origin;
   public Transform target;

   private Vector3 offset;
   private Vector3 targetForward;
   private Vector3 cameraForward;
   private float angle;


   private void Start()
   {
      Recenter();
   }

   public void Recenter()
   {
      offset = head.position - origin.position;
      offset.y = 0;
      origin.position = target.position + offset;
      
      targetForward = target.forward;
      targetForward.y = 0;
      cameraForward = head.forward;
      cameraForward.y = 0;

      angle = Vector3.SignedAngle(cameraForward, targetForward, Vector3.up);
      
      origin.RotateAround(head.position, Vector3.up, angle);
   }
}

0
投票

我想加入对话。我有一个类似的问题。我的 Oculus Quest 2 将我的位置存储在我们的世界中,并根据我真实房间中的位置生成角色。但我希望 Quest 2 在 XR 原点的位置生成玩家。

© www.soinside.com 2019 - 2024. All rights reserved.