How do I display only one controller in a scene?ΒΆ
You can choose to display only one controller in a scene while still maintaining 2 active controllers.
Add the following code:
- New script in WaveVR
private GameObject ControllerLoader_DO = null;
private GameObject loaderInstance_DO = null;
private GameObject ControllerLoader_ND = null;
private GameObject loaderInstance_ND = null;
#region MonoBehaviour Overrides
void OnEnable()
{
WaveVR_Utils.Event.Listen (WaveVR_Utils.Event.CONTROLLER_MODEL_UNLOADED, OnControllerUnloaded);
}
void Start ()
{
this.ControllerLoader_DO = Instantiate(Resources.Load("ControllerLoader", typeof(GameObject))) as GameObject;
this.ControllerLoader_DO.GetComponent<WaveVR_ControllerLoader>().WhichHand = WaveVR_ControllerLoader.ControllerHand.Dominant;
this.ControllerLoader_DO.SetActive(false);
this.ControllerLoader_ND = Instantiate(Resources.Load("ControllerLoader", typeof(GameObject))) as GameObject;
this.ControllerLoader_ND.GetComponent<WaveVR_ControllerLoader>().WhichHand = WaveVR_ControllerLoader.ControllerHand.Non_Dominant;
this.ControllerLoader_ND.SetActive(false);
}
- Update() will monitor the current controller connection status and display only one controller
void Update ()
{
if (WaveVR.Instance == null|| this.ControllerLoader_DO == null || this.ControllerLoader_ND == null)
return;
if (this.loaderInstance_DO != null || this.loaderInstance_ND != null)
return;
WaveVR.Device _dev_do = WaveVR.Instance.getDeviceByType (WaveVR_Controller.EDeviceType.Dominant);
if (_dev_do != null && _dev_do.connected && this.loaderInstance_ND == null)
{
this.loaderInstance_DO = Instantiate(ControllerLoader_DO);
this.loaderInstance_DO.SetActive(true);
}
WaveVR.Device _dev_nd = WaveVR.Instance.getDeviceByType(WaveVR_Controller.EDeviceType.NonDominant);
if (_dev_nd != null && _dev_nd.connected && this.loaderInstance_DO == null)
{
this.loaderInstance_ND = Instantiate(ControllerLoader_ND);
this.loaderInstance_ND.SetActive(true);
}
}
- LoaderInstance will be destroyed and set to null when one of the controllers is disconnected
void OnDisable()
{
WaveVR_Utils.Event.Remove (WaveVR_Utils.Event.CONTROLLER_MODEL_UNLOADED, OnControllerUnloaded);
}
#endregion
void OnControllerUnloaded(params object[] args)
{
WaveVR_Controller.EDeviceType _type = (WaveVR_Controller.EDeviceType)args[0];
switch (_type)
{
case WaveVR_Controller.EDeviceType.Dominant:
if (this.loaderInstance_DO != null)
{
PrintDebugLog("OnControllerUnloaded() remove DO" + this.loaderInstance_DO.name);
this.loaderInstance_DO.SetActive(false);
Destroy(this.loaderInstance_DO);
this.loaderInstance_DO = null;
}
break;
case WaveVR_Controller.EDeviceType.NonDominant:
if (this.loaderInstance_ND != null)
{
PrintDebugLog("OnControllerUnloaded() remove ND" + this.loaderInstance_ND.name);
this.loaderInstance_ND.SetActive(false);
Destroy(this.loaderInstance_ND);
this.loaderInstance_ND = null;
}
break;
default:
break;
}
}