Я пытаюсь разработать HUD для своих VR-плееров, используя две камеры. Одна - это стационарная камера, которая указывает на мои объекты 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, которые не дали положительных результатов, и камеры никогда не прекращали отслеживать.
Я пробовал использовать этот предлагаемый сценарий на моих камерах родитель:
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 контролирует преобразования этих камер? Есть ли способ отключить или переопределить это поведение?
Спасибо.