首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DayDream,不使用事件系统检测指针

DayDream,不使用事件系统检测指针
EN

Stack Overflow用户
提问于 2016-12-11 03:55:33
回答 1查看 662关注 0票数 2

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

代码语言:javascript
复制
Vector3 rayDirection = GvrController.Orientation * Vector3.forward;
if (Physics.Raycast(origin, rayDirection, out hitInfo, Mathf.Infinity)) {

然后你检测到一个特定的物体是否在刻线和摄像机之间。

这种方式已经不起作用了。Google现在正在使用事件系统,然后检查网线是否位于对象上。我有没有办法在不使用事件系统的情况下检查任何对象。

事件系统是一个很好的方法,只是我有大约40个不同的对象都以相同的方式工作,而为这40个不同的对象实现一个事件点/点击似乎是一个过头,而以前我可以通过标记来检查一个对象。

是否有人能够在没有使用事件系统的情况下检测指针是否定位在对象上?光线投射似乎不再正常工作,因为指针似乎更像是一个2D物体,就像鼠标一样。

这大致起作用,但效果不太好:

代码语言:javascript
复制
Vector3 origin = Head.transform.position + GvrController.ArmModel.wristPosition;
Vector3 rayDirection = GvrController.ArmModel.pointerRotation * Vector3.forward;

如能提供任何帮助,将不胜感激:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-15 20:07:11

如果不想使用EventTrigger组件,可以简单地使用相同的旧脚本,实现IPointerEnterHandlerIPointerExitHandlerOnPointerClickHandler等,并对每个对象使用相同的比较标记方法。

我认为它比传统的光线投射更容易使用。因为总是有一个图形雷克斯特(或物理雷克斯特三维物体)在工作,所以为什么不使用它所提供的。

代码语言:javascript
复制
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. 
        }
    }
}

希望这能有所帮助

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41082839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档