Raycast如何与Unity的Canvas UI元素交互?

3
我创建了一个从对象(而不是主摄像机)发射的Raycast,我希望它能击中UI元素。如下图所示。 Example 橙色轮廓的UI,大灰色平面是测试对象,红色头放在用户的头上,绿色是附加到眼睛的我的raycast的DrawRay。我正在尝试让用户看着UI按钮并使射线命中该按钮。
我一直在尝试使用Graphic Raycast,但似乎没有什么作用。灰色平面仍然被射线击中。我尝试使用OnPointerEnter,但问题是我的眼睛射线不是鼠标/手指触摸,而是第二个指针。
有什么想法可以使用isPointerOverGameObject或Graphic Raycaster或任何其他方法使其工作吗?或者如何创建第二个指针,即眼睛射线?
以下是当前代码。
private void FixedUpdate()
{
    GraphicRaycaster gr = this.GetComponent<GraphicRaycaster>();

    PointerEventData pointerData = new PointerEventData(EventSystem.current);

    pointerData.position = Input.mousePosition;

    List<RaycastResult> results = new List<RaycastResult>();
    gr.Raycast(pointerData, results);
    //EventSystem.current.RaycastAll(pointerData, results);
    if (results.Count > 0)
    {
        if (results[0].gameObject.tag == "Test tag")
        {
            Debug.Log("test");
        }
    }




    //----- Failed Graphic raycast experiments above; working RaycastHit below --------


    RaycastHit hit;


        Debug.DrawRay(transform.position, transform.forward * -10000f, Color.green);

        if (Physics.Raycast(transform.position, transform.forward * -1, out hit))
        {

            Debug.Log(hit.transform.name);
        }



}

我明天会试着调整一下,但有几个尝试的方法:1)使用Update而不是FixedUpdate 2)将其包装在if (Input.GetKey(KeyCode.Mouse0))检查中。这两个方法都在文档示例中,并且我不确定它们的重要性。 - Draco18s no longer trusts SE
1个回答

1

如果您想要与画布元素进行适当的交互,则实际上这要复杂得多。

我建议您不要尝试自己解决问题,而是查看一些已经制作好的解决方案。大多数VR工具包都有自己的实现,您可以查看VRTK的示例场景007-交互。 您不必使用VR也可以使用它 - 只需使用回退SDK。

有关此如何运作的更多详细信息,我可能会向您指出Oculus的文章:Unity Sample Framework(有点过时)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接