要访问MRTK 2中的VR控制器GameObject参考?

时间:2019-07-16 13:59:57

标签: c# unity3d mrtk

我目前正在开发一个应用程序,该应用程序需要在用户的运动控制器上粘贴一些对象,但似乎找不到找到引用的方法。

来自VRTK,该VRTK在运行时之外公开了GameObjects,这对我来说是一个挑战。在MRTK上有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

要获取控制器的“代理”游戏对象,可以使用下面的代码(请参阅其中的第一部分,该部分使用可视化工具的代理游戏对象)。

还可以获取指针的游戏对象(请注意,给定的控制器可能具有多个指针)

如果某些术语令人困惑,我还建议您阅读以下内容: https://microsoft.github.io/MixedRealityToolkit-Unity/Documentation/Architecture/InputSystem/Terminology.html

其中解释了一些正在使用的术语以及它们之间的关系。

using Microsoft.MixedReality.Toolkit;
using Microsoft.MixedReality.Toolkit.Input;
using UnityEngine;

public class ControllerPointers : MonoBehaviour
{
   private IMixedRealityInputSystem inputSystem = null;

   /// <summary>
   /// The active instance of the input system.
   /// </summary>
   protected IMixedRealityInputSystem InputSystem
   {
       get
       {
           if (inputSystem == null)
           {
               MixedRealityServiceRegistry.TryGetService<IMixedRealityInputSystem>(out inputSystem);
           }
           return inputSystem;
       }
   }

   // Update is called once per frame
   void Update()
   {
       // Log something every 60 frames.
       if (Time.frameCount % 60 == 0)
       {
           foreach (IMixedRealityController controller in InputSystem.DetectedControllers)
           {
               if (controller.Visualizer?.GameObjectProxy != null)
               {
                   Debug.Log("Visualizer Game Object: " + controller.Visualizer.GameObjectProxy);
               }
               else
               {
                   Debug.Log("Controller has no visualizer!");
               }


               foreach (IMixedRealityPointer pointer in controller.InputSource.Pointers)
               {
                   if (pointer is MonoBehaviour)
                   {
                       var monoBehavior = pointer as MonoBehaviour;
                       Debug.Log("Found pointer game object: " + (monoBehavior.gameObject));
                   }
               }
           }
       }
   }
}

最后,您还可以始终从指针接口本身获取位置/旋转/速度属性(即,在上面的代码中,使用指针位置:https://microsoft.github.io/MixedRealityToolkit-Unity/api/Microsoft.MixedReality.Toolkit.Input.IMixedRealityPointer.html#Microsoft_MixedReality_Toolkit_Input_IMixedRealityPointer_Position

答案 1 :(得分:0)

检查MRTK解算器。 cinda

本教程在第4步中介绍如何将多维数据集“粘贴”到控制器。 (听起来像你的问题) https://microsoft.github.io/MixedRealityToolkit-Unity/Documentation/README_Solver.html

  

一旦选择了手关节,就可以选择要跟随立方体的手的哪一部分。在此示例中,我们将使用手腕。在>“跟踪的手关节”选项旁边,选择下拉菜单,然后选择“手腕”。

有两件事要提...我的自定义“控制器”有问题(我已经用Oculus的手覆盖了默认控制器)还要检查是否需要“手关节”(如本教程中所述)或想要使用下拉菜单中的“向左运动控制器”条目。