DayDream,不使用Event System检测指针

时间:2016-12-11 03:55:34

标签: google-vr

Google的新DayDream示例正在使用事件系统来检测指针是否在对象上。 以前它根本不像那样工作,它是一个十字线,然后你会在相机和十字线之间创建一个Raycast,例如:

public function transactionType() {
    return $this->hasOne("App\Model\TransactionType", "transaction_type_id");
}

public function transactionStatus() {
   return $this->hasOne("App\Model\TransactionStatus", "transaction_status_id");
}

然后检测特定物体是否在光罩和相机之间。

这种方式不再适用。 Google现在正在使用事件系统,然后检查光罩是否位于对象上。 有没有办法让我在不使用事件系统的情况下检查任何对象。

事件系统是一个很好的方法,它只是我有大约40个不同的对象,它们都以相同的方式工作,并且为这40个不同的对象实现事件点/点击似乎是一个过度的,以前我只能检查一个对象按标签。

任何人都有机会能够在不使用Event系统的情况下检测指针是否位于对象上? Raycast似乎不再正常工作,因为指针似乎更像是2D对象,就像鼠标一样。

这大致有效,但不是很好:

Vector3 rayDirection = GvrController.Orientation * Vector3.forward;
if (Physics.Raycast(origin, rayDirection, out hitInfo, Mathf.Infinity)) {

任何帮助将不胜感激:)

1 个答案:

答案 0 :(得分:2)

如果您不想使用EventTrigger组件,只需使用相同的旧脚本并实施IPointerEnterHandlerIPointerExitHandlerOnPointerClickHandler等,并使用相同的比较标记方法对于每个对象。

我认为它比自定义光线播放更容易使用。由于工作中始终存在Graphics Raycaster(或3D物理射线工程师),所以为什么不使用它提供的功能。

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. 
        }
    }
}

希望这有帮助