44using System . Collections ;
55using System . Collections . Generic ;
66using UnityEngine ;
7+ using HTC . UnityPlugin . VRModuleManagement ;
8+ using System . Reflection ;
79
810#if VIU_OCULUSVR_AVATAR
911using 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