谷歌的新DayDream示例使用事件系统来检测指针是否在对象上。以前它根本不是那样工作的,它是一个刻线线,然后在摄像机和网线之间创建一个Raycast,例如:
Vector3 rayDirection = GvrController.Orientation * Vector3.forward;
if (Physics.Raycast(origin, rayDirection, out hitInfo, Mathf.Infinity)) {然后你检测到一个特定的物体是否在刻线和摄像机之间。
这种方式已经不起作用了。Google现在正在使用事件系统,然后检查网线是否位于对象上。我有没有办法在不使用事件系统的情况下检查任何对象。
事件系统是一个很好的方法,只是我有大约40个不同的对象都以相同的方式工作,而为这40个不同的对象实现一个事件点/点击似乎是一个过头,而以前我可以通过标记来检查一个对象。
是否有人能够在没有使用事件系统的情况下检测指针是否定位在对象上?光线投射似乎不再正常工作,因为指针似乎更像是一个2D物体,就像鼠标一样。
这大致起作用,但效果不太好:
Vector3 origin = Head.transform.position + GvrController.ArmModel.wristPosition;
Vector3 rayDirection = GvrController.ArmModel.pointerRotation * Vector3.forward;如能提供任何帮助,将不胜感激:)
发布于 2016-12-15 20:07:11
如果不想使用EventTrigger组件,可以简单地使用相同的旧脚本,实现IPointerEnterHandler、IPointerExitHandler、OnPointerClickHandler等,并对每个对象使用相同的比较标记方法。
我认为它比传统的光线投射更容易使用。因为总是有一个图形雷克斯特(或物理雷克斯特三维物体)在工作,所以为什么不使用它所提供的。
public class MyOldScriptWhichUsedRaycasting: MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerClickHandler
{
public void OnPointerEnter (PointerEventData eventData)
{
if(gameObject.CompareTag("Grabable"))
{
//do stuff here.
}
}
public void OnPointerExit (PointerEventData eventData)
{
if(gameObject.CompareTag("Grabable"))
{
//do stuff here.
}
}
public void OnPointerClick (PointerEventData eventData)
{
if(gameObject.CompareTag("Grabable"))
{
//do stuff here.
}
}
}希望这能有所帮助
https://stackoverflow.com/questions/41082839
复制相似问题