Skip to content

Commit daa5100

Browse files
author
lawwong
committed
Fix OvrAvatarDriver doens't recognize Quest2 controller
1 parent 927e267 commit daa5100

1 file changed

Lines changed: 55 additions & 0 deletions

File tree

  • Assets/HTC.UnityPlugin/ViveInputUtility/Scripts/Misc/OculusVRExtension

Assets/HTC.UnityPlugin/ViveInputUtility/Scripts/Misc/OculusVRExtension/VIUOvrAvatar.cs

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
using System.Collections;
55
using System.Collections.Generic;
66
using UnityEngine;
7+
using HTC.UnityPlugin.VRModuleManagement;
8+
using System.Reflection;
79

810
#if VIU_OCULUSVR_AVATAR
911
using Oculus.Avatar;
@@ -13,6 +15,15 @@ namespace HTC.UnityPlugin.Vive.OculusVRExtension
1315
{
1416
public class VIUOvrAvatar : MonoBehaviour
1517
{
18+
// Should align ovrAvatarControllerType
19+
public enum OVRControllerType
20+
{
21+
Touch,
22+
Malibu,
23+
Go,
24+
Quest,
25+
}
26+
1627
#if VIU_OCULUSVR_AVATAR
1728
public const bool SUPPORTED = true;
1829
#if UNITY_ANDROID && !UNITY_EDITOR
@@ -183,6 +194,50 @@ public void GetReady()
183194

184195
gameObject.SetActive(true);
185196

197+
// FIXME: try load Quest model instead of Rift model for Quest 2
198+
// Also notice that at this point there's no Quest 2 render model from runtime
199+
LiteCoroutineSystem.LiteCoroutine.DelayUpdateCall += () =>
200+
{
201+
try
202+
{
203+
var controllerType = OVRControllerType.Quest;
204+
switch ((OculusVRModule.OVRSystemHeadset)OVRPlugin.GetSystemHeadsetType())
205+
{
206+
case OculusVRModule.OVRSystemHeadset.Oculus_Go:
207+
controllerType = OVRControllerType.Go;
208+
break;
209+
case OculusVRModule.OVRSystemHeadset.GearVR_R320:
210+
case OculusVRModule.OVRSystemHeadset.GearVR_R321:
211+
case OculusVRModule.OVRSystemHeadset.GearVR_R322:
212+
case OculusVRModule.OVRSystemHeadset.GearVR_R323:
213+
case OculusVRModule.OVRSystemHeadset.GearVR_R324:
214+
case OculusVRModule.OVRSystemHeadset.GearVR_R325:
215+
controllerType = OVRControllerType.Malibu;
216+
break;
217+
case OculusVRModule.OVRSystemHeadset.Rift_DK1:
218+
case OculusVRModule.OVRSystemHeadset.Rift_DK2:
219+
case OculusVRModule.OVRSystemHeadset.Rift_CV1:
220+
controllerType = OVRControllerType.Touch;
221+
break;
222+
case OculusVRModule.OVRSystemHeadset.Oculus_Link_Quest:
223+
case OculusVRModule.OVRSystemHeadset.Oculus_Quest:
224+
case OculusVRModule.OVRSystemHeadset.Rift_S:
225+
case OculusVRModule.OVRSystemHeadset.Oculus_Link_Quest_2:
226+
case OculusVRModule.OVRSystemHeadset.Oculus_Quest_2:
227+
controllerType = OVRControllerType.Quest;
228+
break;
229+
}
230+
typeof(OvrAvatarDriver).GetField("ControllerType", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(ovrAvatarDriver, (ovrAvatarControllerType)controllerType);
231+
Debug.Log("[VIUOvrAvatar] OvrAvatarDriver.ControllerType set to " + controllerType);
232+
}
233+
catch (Exception e)
234+
{
235+
Debug.Log("[VIUOvrAvatar] fail to fix ovrAvatarDriver controller type");
236+
Debug.LogError(e);
237+
}
238+
};
239+
LiteCoroutineSystem.LiteCoroutine.WakeUp();
240+
186241
#if VIU_OCULUSVR_20_0_OR_NEWER
187242
ovrAvatar.Monochrome_SurfaceShader = Shader.Find("OvrAvatar/AvatarSurfaceShader");
188243
ovrAvatar.Monochrome_SurfaceShader_SelfOccluding = Shader.Find("OvrAvatar/AvatarSurfaceShaderSelfOccluding");

0 commit comments

Comments
 (0)