請選擇您的所在地

Australia
Österreich
België
Canada
Canada - Français
中国
Česká republika
Denmark
Deutschland
France
HongKong
Iceland
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

如何在執行階段中取得控制器物件?

WaveVR 使用 Controller Loader 在運行時加載控制器。因此,無法在編輯器中修改控制器物件。

資產 > WaveVR > 額外 > GenericModel > 資源 > 控制器中,通用控制器模型 prefab 顯示 WaveVR 控制器的架構。

Prefab 包含控制器模型、控制器光束以及控制器指標

請前往在控制器模型中尋找光束和指標 (範例程式碼),了解如何取得光束和指標。

在控制器模型中尋找光束和指標 (範例程式碼)

請依照下列步驟尋找光束和指標。
  1. 聆聽 CONTROLLER_MODEL_LOADED 廣播以接收控制器執行個體。
  2. 找出控制器的所有子控制器 (children)。
  3. 以子控制器中的光束/指標找出 GameObject。
    private GameObject dominantController = null, nonDominantController = null; void OnEnable() { WaveVR_Utils.Event.Listen (WaveVR_Utils.Event.CONTROLLER_MODEL_LOADED, OnControllerLoaded); }
    
    void OnControllerLoaded(params object[] args) { WaveVR_Controller.EDeviceType _type = (WaveVR_Controller.EDeviceType)args [0]; if (_type == WaveVR_Controller.EDeviceType.Dominant) { this.dominantController = (GameObject)args [1]; listControllerObjects(this.dominantController); } if (_type == WaveVR_Controller.EDeviceType.NonDominant) { this.nonDominantController = (GameObject)args [1]; listControllerObjects(this.nonDominantController); } }
    
    void OnDisable() { WaveVR_Utils.Event.Remove (WaveVR_Utils.Event.CONTROLLER_MODEL_LOADED, OnControllerLoaded); }
    
    private void listControllerObjects(GameObject ctrlr) { if (ctrlr == null) return;
    
    WaveVR_Beam _beam = null; WaveVR_ControllerPointer _pointer = null;
    
    // Get all children.GameObject[] _objects = new GameObject[ctrlr.transform.childCount]; for (int i = 0; i < ctrlr.transform.childCount; i++) _objects[i] = ctrlr.transform.GetChild (i).gameObject;
    
    // Find beam. for (int i = 0; i < _objects.Length; i++) { _beam = _objects [i].GetComponentInChildren<WaveVR_Beam> (); if (_beam != null) break; } if (_beam != null) Debug.Log ("‍Find beam:"‍ + _beam.name);
    
    // Find pointer. for (int i = 0; i < _objects.Length; i++) { _pointer = _objects [i].GetComponentInChildren<WaveVR_ControllerPointer> (); if (_pointer != null) break; } if (_pointer != null) Debug.Log ("‍Find pointer:"‍ + _pointer.name); }
送出
謝謝您!