Как получить позицию активного указателя MRTK? - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь поместить объект предварительного просмотра в конце сочлененного указателя руки в Mixed Reality Toolkit.Как я могу получить положение, где указатель ударяет геометрию?

У меня DefaultControllerPointer установлен на сочлененную руку, но мне нужно получить ссылку на него, а затем получить положение преобразования наконечника.

Ответы [ 2 ]

2 голосов
/ 10 мая 2019

Вот пример того, как вы должны выполнить итерацию по всем контроллерам, найти сочлененные руки, которые являются лучами рук, и затем получить положение конечной точки (а также начальной точки луча) и, наконец, выяснить, является ли луч поражает геометрию (объект), так как имеет длину по умолчанию:

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

public class HitPointTest : MonoBehaviour
{
    // Update is called once per frame
    void Update()
    {
        foreach(var source in MixedRealityToolkit.InputSystem.DetectedInputSources)
        {
            // Ignore anything that is not a hand because we want articulated hands
            if (source.SourceType == Microsoft.MixedReality.Toolkit.Input.InputSourceType.Hand)
            {
                foreach (var p in source.Pointers)
                {
                    if (p is IMixedRealityNearPointer)
                    {
                        // Ignore near pointers, we only want the rays
                        continue;
                    }
                    if (p.Result != null)
                    {
                        var startPoint = p.Position;
                        var endPoint = p.Result.Details.Point;
                        var hitObject = p.Result.Details.Object;
                        if (hitObject)
                        {
                            var sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                            sphere.transform.localScale = Vector3.one * 0.01f;
                            sphere.transform.position = endPoint;
                        }
                    }

                }
            }
        }
    }
}

Обратите внимание, что это для последней кодовой базы mrtk_development, также должно работать с RC1.

0 голосов
/ 10 мая 2019

возьмите это для вашего экземпляра объекта предварительного просмотра и поместите, например, в обновление:

instantiatedSphere.transform.position = GazeManager.Instance.HitPosition;
...