2

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

来自 VRTK,它在运行时间之外暴露了游戏对象,这对我来说是一个挑战。有没有更好的方法在 MRTK 上执行此操作?

4

2 回答 2

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 )

于 2019-07-16T16:45:32.863 回答
0

检查 MRTK 求解器。 https://microsoft.github.io/MixedRealityToolkit-Unity/Documentation/README_Solver.html

本教程在第 4 步中描述了如何将立方体“粘贴”到控制器上。(听起来像你的问题) https://docs.microsoft.com/en-us/windows/mixed-reality/mrlearning-base-ch3

一旦你选择了手关节,你就可以选择你想要>立方体跟随的手的哪个部分。对于这个例子,我们将使用手腕。在 > 选项 Tracked Hand Joint 旁边,选择下拉菜单并选择 Wrist。

有两件事要提...我的自定义“控制器”有问题(我已经用 Oculus 手覆盖了默认控制器)另外检查您是否需要“手关节”(如教程中所示)或者是否要使用下拉列表中的“左侧运动控制器”条目。

于 2019-08-07T18:52:26.810 回答