我正在尝试使用两台相机为我的VR播放器开发HUD。一个是静止摄像头,指向深度= 1的HUD对象,另一个是深度= 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脚本,并且摄像头从未停止跟踪。
我尝试在我的相机父母身上使用this suggested script:
NegateTracking.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如何控制这些相机的变换?有没有办法禁用或覆盖此行为?
谢谢。
答案 0 :(得分:1)
所以,只花了一整夜开发一个功能性的解决方法,并将一个使用一点后期处理魔法的项目组合在一起,基本上是#欺骗&#34;固定的相机。我的想法是从自定义立体摄像机设置生成两个renderTextures,这两个摄像机设置包括两个未被跟踪的独立摄像机(允许控制位置,旋转,会聚平面.fov等)。然后我将这些相机的(左和右)renderTextures传递给其中一个&#34;跟踪&#34;的左眼和右眼。 OnRenderImage()函数中的摄像头。它比我预期的要好,所以我决定把所有东西都放在GitHub上,并为其他需要这样做的人写一个简短的教程。
答案 1 :(得分:0)
或者您可以在Camera组件中更改目标显示和目标类型(到主显示)。 (也可以在脚本中完成)