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

时间:2018-05-21 03:18:01

标签: c# unity3d raycasting unity-ui

我创建了一个从对象(不是主摄像头)拍摄的Raycast,我希望它能够点击UI元素。以下示例。 Example

用橙色勾勒出的UI,大灰色平面是一个测试对象,红头放在用户的头上,绿色是我的光线投影的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 个答案:

答案 0 :(得分:1)

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

我建议您不要尝试自己推出解决方案,但请看一些已经制定的解决方案。大多数VR工具包都有自己的实现,您可以查看VRTK的示例场景007 - 交互。您不必使用VR来使用它 - 只需使用后备SDK。

有关其工作原理的详细信息,我可能会向您指出Oculus的文章:Unity Sample Framework(有点过时)。