국가 선택/위치
Australia
Österreich
België
Canada
Canada - Français
中国
Česká republika
Denmark
Deutschland
France
HongKong
Iceland
Ireland
Italia
日本
Korea
Latvija
Lietuva
Lëtzebuerg
Malta
المملكة العربية السعودية (Arabic)
Nederland
New Zealand
Norge
Polska
Portugal
Russia
Saudi Arabia
Southeast Asia
España
Suisse
Suomi
Sverige
台灣
Ukraine
United Kingdom
United States
국가 선택/위치
België
Česká republika
Denmark
Iceland
Ireland
Italia
Latvija
Lietuva
Lëtzebuerg
Malta
Nederland
Norge
Polska
Portugal
España
Suisse
Suomi
Sverige

장면에 하나의 컨트롤러만 표시하려면 어떻게 해야 하나요?

2개의 활성 컨트롤러를 계속 유지하는 동안 장면에 하나의 컨트롤러만 표시하도록 선택할 수 있습니다.

다음 코드를 추가하십시오.

  • 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 ()는 현재 컨트롤러 연결 상태를 모니터링하고 하나의 컨트롤러만 표시합니다.
    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는 소멸되며 null로 설정됩니다.
    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; } }
제출
감사합니다! 귀하의 피드백은 다른 사람들이 가장 도움이 되는 정보를 보는 데 도움이 됩니다.