5
public Transform OculusPlayerPrefab;
public Transform DefaultPlayerPrefab;
void Start() {
    Transform player = OVRDevice.IsHMDPresent() ?
        (Transform)Instantiate(OculusPlayerPrefab) :
        (Transform)Instantiate(DefaultPlayerPrefab);
    player.position = transform.position;
}

这应该检测 oculus rift HMD 是否已连接并实例化 oculus 播放器预制件,否则为默认值。但是,IsHMDPresent()无论 Oculus Rift 是否已连接,都会返回 false。然而,在 unity/oculus 集成包中,OVRMainMenu 使用 IsHMDPresent() 方法并获得预期结果。

4

3 回答 3

2

编辑:这个答案来自 2014 年,基于 Unity 4。您可能想使用其他答案。

我发现这种方法效果最好:

Ovr.Hmd.Detect() > 0

还要记住HMDLost/HMDAcquired事件,因此您不必每帧都轮询:

bool oculusPresent=false;
void CheckOculusPresence() {
  oculusPresent=Ovr.Hmd.Detect() > 0;
}

void Start() {
  CheckOculusPresence();
  OVRManager.HMDAcquired+=CheckOculusPresence;
  OVRManager.HMDLost+=CheckOculusPresence;
}

(oculus SDK 0.4.3/unity3d 4.5.5,OSX/Windows)

于 2014-11-24T07:47:11.643 回答
2

Unity 现在有一个内置的方法来检测这一点。

http://forum.unity3d.com/threads/simply-detecting-the-oculus-rifts-presence-solved.294089/#post-2368233

文档:http ://docs.unity3d.com/ScriptReference/VR.VRDevice-isPresent.html

于 2015-11-04T12:10:47.470 回答
2

从(至少)Unity 2018.2 开始,使用 Oculus Utilities,以下工作:

if (OVRManager.isHMDPresent) {
    // headset connected
}

我要补充一点,您也可以订阅HMDMountedHMDUnmounted事件,这有点相关:

OVRManager.HMDMounted   += MyOnHMDMountedFunction();
OVRManager.HMDUnmounted += MyOnHMDUnmountedFunction();

当您戴上(HMDMounted)和/或取下(HMDUnmounted)您的耳机时,它们会触发。

于 2019-06-06T20:51:06.400 回答