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)) {
任何帮助将不胜感激:)
答案 0 :(得分:2)
如果您不想使用EventTrigger组件,只需使用相同的旧脚本并实施IPointerEnterHandler
,IPointerExitHandler
,OnPointerClickHandler
等,并使用相同的比较标记方法对于每个对象。
我认为它比自定义光线播放更容易使用。由于工作中始终存在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.
}
}
}
希望这有帮助