我想知道 OnPointerDown 上的目标位置是否有一个多合一的解决方案。我想在表面上生成东西,如果我没有击中任何东西,请将其放在光标所在的位置。这并不像我想象的那么微不足道,不是吗?
在 Hololens 的情况下,监听 OnPointerDown 不包含有关默认光标位置的信息,这似乎是唯一知道它在用户面前的所需位置的信息。它也不包含有关使用 DefaultCursor 的 FocusProvider 的任何信息。因此,在指针命中失败的情况下,在 Hololens 上,我需要通过 MixedRealityToolkit 从 FocusProvider 检索默认光标。这有点奇怪,感觉像是 FocusProvider 的信息,和/或光标应该是信息的一部分。
我知道,OnPointerDown 是由手发出的,但如果是 Hololens 1,谁不想使用凝视?更奇怪的是,在命中的情况下,InputEventData 确实包含很多信息,甚至不是来自手,而是来自头部,也就是 FocusProvider,不是吗?
user11369998
问问题
496 次
1 回答
2
您可以使用以下代码在 OnPointerDown、OnPointerClicked 和 OnPointerUp 中获取指针端点的位置:
var result = eventData.Pointer.Result;
if (result != null)
{
var endPoint = result.Details.Point;
}
例如,这是一个最近的脚本,我用它在我点击的任何地方生成一个对象:
using Microsoft.MixedReality.Toolkit;
using Microsoft.MixedReality.Toolkit.Input;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ClickSpawn : MonoBehaviour, IMixedRealityPointerHandler
{
public GameObject spawnObject;
public InputSourceType sourceType = InputSourceType.Hand;
// Start is called before the first frame update
void OnEnable()
{
MixedRealityToolkit.InputSystem.Register(gameObject);
}
private void OnDisable()
{
if (MixedRealityToolkit.InputSystem != null)
{
MixedRealityToolkit.InputSystem.Unregister(gameObject);
}
}
public void OnPointerDown(MixedRealityPointerEventData eventData)
{
}
public void OnPointerDragged(MixedRealityPointerEventData eventData)
{
}
public void OnPointerUp(MixedRealityPointerEventData eventData)
{
if (spawnObject != null && eventData.InputSource.SourceType == sourceType)
{
var spawn = Instantiate(spawnObject);
var result = eventData.Pointer.Result;
if (result != null)
{
spawn.transform.position = result.Details.Point;
}
}
}
public void OnPointerClicked(MixedRealityPointerEventData eventData)
{
}
}
于 2019-06-27T06:44:44.923 回答