VR게임을 만들 때 Player가 HMD을 착용했는지 착용해제 했는지 상황 트래킹이 필요한 경우가 있습니다.
HMD Condition을 트래킹 하려면 OVRManager을 활용하면 됩니다.
OVRManager 구조
HMDManager
public class HMDManager : MonoBehaviour
{
public static HMDManager Instance { get; private set; }
public bool IsHMDConnected { get; private set; }
public bool IsHMDMounted { get; private set; }
private void Awake()
{
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
private void Start()
{
IsHMDConnected = OVRManager.isHmdPresent;
OVRManager.HMDMounted += HandleHMDMounted;
OVRManager.HMDUnmounted += HandleHMDUnmounted;
OVRManager.HMDLost += HandleHMDLost;
OVRManager.HMDAcquired += HandleHMDAcquired;
}
private void HandleHMDMounted()
{
IsHMDMounted = true;
DebugUtils.LogColor("HMD Mounted", Color.green);
}
private void HandleHMDUnmounted()
{
IsHMDMounted = false;
DebugUtils.LogColor("HMD Unmounted", Color.blue);
}
private void HandleHMDLost()
{
IsHMDConnected = false;
DebugUtils.LogColor("HMD Lost", Color.red);
}
private void HandleHMDAcquired()
{
IsHMDConnected = true;
DebugUtils.LogColor("HMD Acquired", Color.yellow);
}
private void OnDestroy()
{
OVRManager.HMDMounted -= HandleHMDMounted;
OVRManager.HMDUnmounted -= HandleHMDUnmounted;
OVRManager.HMDLost -= HandleHMDLost;
OVRManager.HMDAcquired -= HandleHMDAcquired;
}
}
DebugUtils의 경우
2023.07.27 - [Unity/Study] - 유니티 Debug.Log 유틸리티
링크를 참고하시면 됩니다.
HMDManager을 이용해서 원하는 기능 구현하시면 됩니다.
HMDManager을 이용한 HMD 트래킹 결과
HMDManager을 통해 HMD Condition을 트래킹 해본 결과,
유저가 HMD을 착용하고 게임을 시작하면 HMD Acquired Log을 출력됩니다.
그 후 유저가 HMD을 착용 및 해제할 땐 HMD Mounted / HMD Unmounted가 Log가 출력된 것을 볼 수 있습니다.
마지막으로 게임 종료시 HMD Lost Log가 출력됩니다.