我创建了一个从对象(不是主摄像头)拍摄的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);
}
}
答案 0 :(得分:1)
如果你想与canvas元素进行适当的交互,这实际上要复杂得多。
我建议您不要尝试自己推出解决方案,但请看一些已经制定的解决方案。大多数VR工具包都有自己的实现,您可以查看VRTK的示例场景007 - 交互。您不必使用VR来使用它 - 只需使用后备SDK。
有关其工作原理的详细信息,我可能会向您指出Oculus的文章:Unity Sample Framework(有点过时)。