如何获取活动 MRTK 指针的位置?
How do I get the position of an active MRTK pointer?
我正在尝试将预览对象放置在混合现实工具包中的铰接指针的末尾。如何获得指针击中几何体的位置?
我已将 DefaultControllerPointer 设置为关节手,但我需要获取对它的引用,然后获取尖端的变换位置。
把这个作为你的实例化 preview-object 并把它作为例子放在更新中:
instantiatedSphere.transform.position = GazeManager.Instance.HitPosition;
这是一个示例,说明如何遍历所有控制器,找到作为手射线的铰接手,然后获取终点(以及射线起点)的位置,最后确定是否光线击中几何体(一个物体),因为它有一个默认长度:
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。
我正在尝试将预览对象放置在混合现实工具包中的铰接指针的末尾。如何获得指针击中几何体的位置?
我已将 DefaultControllerPointer 设置为关节手,但我需要获取对它的引用,然后获取尖端的变换位置。
把这个作为你的实例化 preview-object 并把它作为例子放在更新中:
instantiatedSphere.transform.position = GazeManager.Instance.HitPosition;
这是一个示例,说明如何遍历所有控制器,找到作为手射线的铰接手,然后获取终点(以及射线起点)的位置,最后确定是否光线击中几何体(一个物体),因为它有一个默认长度:
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。