请选择您的所在地
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

如何在运行时中获取操控手柄对象?

WaveVR 使用 Controller Loader 以在运行时中加载操控手柄。因此,无法在编辑器中修改操控手柄对象。

Assets > WaveVR > Extra > GenericModel > Resources > Controller 中,Generic Controller Model 预制对象显示了 WaveVR 操控手柄的架构。

预制对象包含操控手柄模型、操控手柄光束以及操控手柄指针

前往在操控手柄模型中找到光束和指针(示例代码),以了解如何获取光束和指针。

在操控手柄模型中找到光束和指针(示例代码)

请按照以下步骤找到光束和指针。
  1. 监听 CONTROLLER_MODEL_LOADED 广播以接收操控手柄实例。
  2. 寻找所有操控手柄的子对象。
  3. 在子对象中寻找具有光束/指针的对象。
    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); }
提交
谢谢!您的反馈可以帮助其他人了解最有用的信息。