-
VIVE Wave
-
SDK
- VIVE Wave 是什麼?
- 哪裡可以下載 Wave SDK?
- 如何存取 Wave Developer Community 論壇?
- 匯入自訂套件後,如何修正編譯或建置錯誤?
- 如何將控制器放入場景中?
- 如何在同一場景內切換不同的追蹤姿勢設定?
- 如何在同一個場景中切換 6DoF 和 3DoF?
- 為什麼無法接收事件或點按系統重疊?
- 如何在執行階段中取得控制器物件?
- 如何顯示或隱藏控制器指標?
- 如何將控制器模型物件從模型原點 (Root) 更改為發射器起始點 (Emitter)?
- 如何得知控制器是否傳送事件?
- 如何在僅能旋轉 (Rotation-Only) 的環境下設定控制器位置?
- 如何在場景中只顯示一個控制器?
- 如何找出頭部與地板的距離?
-
-
VIVE SRWorks
-
VIVE 眼球和臉部追蹤
-
VIVE 手勢追蹤
-
VIVE 3DSP Audio
-
VIVEPORT
-
VIVE Business 串流
-
臉部追蹤
-
手勢追蹤
-
如何在執行階段中取得控制器物件?
WaveVR 使用 Controller Loader 在運行時加載控制器。因此,無法在編輯器中修改控制器物件。
在資產 > WaveVR > 額外 > GenericModel > 資源 > 控制器中,通用控制器模型 prefab 顯示 WaveVR 控制器的架構。
請前往在控制器模型中尋找光束和指標 (範例程式碼),了解如何取得光束和指標。
在控制器模型中尋找光束和指標 (範例程式碼)
請依照下列步驟尋找光束和指標。
- 聆聽 CONTROLLER_MODEL_LOADED 廣播以接收控制器執行個體。
- 找出控制器的所有子控制器 (children)。
-
以子控制器中的光束/指標找出 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); }
這對您有幫助嗎?
是
否
送出
感謝您!您的意見回報可協助他人查看最實用的資訊。