我想知道OnPointerDown上的目标位置是否有一个完整的解决方案。我想在表面上生成东西,如果我什么都没击中,请将其放在光标所在的位置。这不像我想的那么简单,不是吗?
如果是Hololens,则监听OnPointerDown不会包含有关默认光标位置的信息,这似乎是唯一了解它在用户面前所需位置的信息。它还不包含有关使用DefaultCursor的FocusProvider的任何信息。
因此,如果在Hololens上指针失败,我需要通过MixedRealityToolkit从FocusProvider检索默认光标。
这有点奇怪,感觉像是FocusProvider的信息,并且/或者光标应该是信息的一部分。
我知道,OnPointerDown是手动发出的,但是在Hololens 1的情况下,谁不想处理凝视?
更奇怪的是,如果发生击中,InputEventData确实包含很多信息,这些信息甚至不是来自手,而是来自头(即FocusProvider),不是吗?
答案 0 :(得分:0)
您可以使用以下代码来获取指针端点在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)
{
}
}