哎呀?为什么设置节点点击回调后没有反应?记得之前写鸡拍的时候遇到了一个问题。我想捕捉排球的点击事件。按照2d的写法,我给3d的节点添加了一个节点事件,但是点击没有任何反应。代码可能如下所示。this.node_volleyball.on(Node.EventType.TOUCH_START,()=>{console.log('Impossibletoseeme')},this);后来在论坛上找了个方法,迷糊写了下,就完了。但是最近我把版本升级到v1.0.1后,发现之前的方法不行了。幸运的是,在最新的官方文档中找到了解决方案。那就是——射线检测。什么是射线检测?我上网查了一下,X光检查是这样的。这似乎不是我想要的。于是,我脑补了一下射线检测的逻辑。首先,我们看到的视角是这样的。假设我们点击屏幕中的某个位置(图中的红点)。因为这个视角是由相机提供的,所以我们把这个点和相机结合成一条射线。接下来,检查这条光线是否穿过那些物体,这些物体可能有我们点击的物体。也可以理解为用眼睛注视一个区域,伸出手指。可以看到手指稍微挡住了视线。从您的视线通过指尖画一条射线。该射线穿过的对象正是您要单击的对象。说完大体原理(?),我们再来看看如何使用。既然是射线检测,当然要先创建一条射线。私有_ray:geometry.ray=newgeometry.ray();全局系统事件用于触摸检测。systemEvent.on(SystemEventType.TOUCH_START,this.onTouchStart,this);//onTouchStart(touch:Touch,event:EventTouch)开始绘制射线,所以我们要用到相机!记住我上面说的,射线是由点击的点和相机决定的。this.camera_3d.screenPointToRay(touch._point.x,touch._point.y,this._ray);下一步是检测这条线穿过哪些物体。creator3d提供了三种检测方案,大家可以看看如何搭配使用。基于物理对撞机的射线检测:我们首先给待检测的物体添加一个对撞机。代码中调用物理碰撞体检测方法即可。//基于物理对撞机的射线检测if(PhysicsSystem.instance.raycast(this._ray)){constr=PhysicsSystem.instance.raycastResults;for(leti=0;i
