我正在尝试使用两个摄像头为我的 VR 播放器开发 HUD。一个是固定相机,它指向我的 HUD 对象,深度 = 1,另一个是深度 = 0 的主相机,它跟踪 HMD 并将 HUD 覆盖在上面。
然而 Unity、SteamVR 或 OpenVR 正在强制我的相机跟踪玩家的 HMD。经过详尽的搜索后,我无法找到任何方法来阻止这种行为。然后我尝试将我所有的 HUD 对象作为我的 HUD 相机的父对象,并希望能做到最好。
这会导致所有 HUD 对象出现不希望的抖动运动:
项目层次结构:
[WorldHUD]
|__ Container (HUD)
|__ Camera (eye)
|__ TextMesh (Status) <- Is child of camera
[CameraRig]
|__ Camera (Head)
|__ Camera (eye)
[SteamVR]
我相信我真的需要控制我的相机的变换,所以我可以防止它移动或阻止它跟踪玩家的 HMD。
我已尝试更新相机位置,Update()
但这LateUpdate()
没有任何影响。我还花了很多时间修改/调试 SteamVR 和 OVR 脚本,这些脚本没有积极的结果,而且摄像机从未停止跟踪。
我尝试在我的相机父级上使用这个建议的脚本:
否定跟踪.cs:
using UnityEngine;
using UnityEngine.VR;
public class NegateTracking : MonoBehaviour
{
void LateUpdate()
{
transform.position = -InputTracking.GetLocalPosition(VRNode.CenterEye);
transform.rotation = Quaternion.Inverse(InputTracking.GetLocalRotation(VRNode.CenterEye));
}
}
这导致相机指向一个方向,但仍在平移。但是,我注意到这种方式似乎更加不稳定,并且觉得我要么用错了,要么还不够。
我现在又开始寻找在某些摄像机上禁用头部跟踪的方法,以便能够将它们定位在我的场景中。
有谁知道 SteamVR/OpenVR 如何控制这些相机的变换?有没有办法禁用或覆盖这种行为?
谢谢你。