如何始终获得射线广播的尖端?

时间:2019-06-26 07:34:57

标签: mrtk

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

1 个答案:

答案 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)
    {
    }
}