1

我想知道 OnPointerDown 上的目标位置是否有一个多合一的解决方案。我想在表面上生成东西,如果我没有击中任何东西,请将其放在光标所在的位置。这并不像我想象的那么微不足道,不是吗?
在 Hololens 的情况下,监听 OnPointerDown 不包含有关默认光标位置的信息,这似乎是唯一知道它在用户面前的所需位置的信息。它也不包含有关使用 DefaultCursor 的 FocusProvider 的任何信息。因此,在指针命中失败的情况下,在 Hololens 上,我需要通过 MixedRealityToolkit 从 FocusProvider 检索默认光标。这有点奇怪,感觉像是 FocusProvider 的信息,和/或光标应该是信息的一部分。
我知道,OnPointerDown 是由手发出的,但如果是 Hololens 1,谁不想使用凝视?更奇怪的是,在命中的情况下,InputEventData 确实包含很多信息,甚至不是来自手,而是来自头部,也就是 FocusProvider,不是吗?

4

1 回答 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 回答