3.0.1 3D模型检测不到鼠标事件?

作为unity转cocos一周的新手,想问一下各位大佬——我导入的fbx模型或者直接创建的立方体,添加了代码:
this.node.on(‘mouse-enter’, (event: any) => {
console.log(‘hi’);
}, this); 在web构建里都没有任何反应是为什么?

之前我添加了一个整个屏幕的canvas, 用来监听mouse-wheel 事件和touch-move事件,都是可以正常使用的。用同样的写法,对于场景里的3D物体, 就不起作用了。一开始我以为canvas没设置好, 会吞掉场景内的其他鼠标事件监听,所以我就把之前那个canvas节点整个关闭了,但是仍然没有起作用。

我也看到有之前版本的讨论,说要用raycast。难道最新版本的解决方案也还是射线侦测吗? 不是很理解,谢谢。

同有疑问,帮顶

1赞

我刚刚又查看了一下关于Node.on的文档,文档里说:


Use this method to register touch or mouse event permit propagation based on scene graph,这个scene graph是不是说 只能是canvas这类的检测,对于场景里的3D模型 不能用这个api来检测?

是不是鼠标事件this.node.on(‘mouse-enter’) 需要物体具有其他组件呢? 比如rigidbody 或者 boxcollider?

3d 模型 可以使用 射线ray 来检测;
可参考官方demo:https://gitee.com/mirrors_cocos-creator/test-cases-3d/tree/master/assets/cases/raycast

1赞

您好,我刚刚成功用raycast检测到了, 但是如果加上我之前所说的整个屏幕的canvas, 射线就会被抵挡,谢谢解答 :laughing: 总算是有了进展哈哈

经过了自身的尝试,现在总结一下我的方法和注意事项。

首先,回顾一下我的需求和遇到的问题。

需求:我目前正在做一个,要构建应用到web中的3D可交互的地图项目。需要完成的地图最基本功能:

  1. 鼠标滚轮控制远近缩放;
  2. 鼠标左键拖动地图旋转;
  3. 鼠标左键点击场景内的建筑;
    问题:
    对于需求1、2, 直接在场景内增加一个canvas, 添加脚本并使用this.node.on(‘mouse-wheel’, (event:any) => {}); 方法, 即可简单监听鼠标滚轮、左键, 在屏幕层面上的动作事件;
    对于需求3, 场景内的3D模型的点击检测,则不能用node.on的方法监听。 因此采用给camera增加raycast,去检测射线触碰到了哪个建筑.
    具体的代码我是参考了这一篇, 进行小的修改即可实现:
    https://blog.csdn.net/judykang123/article/details/108390003?ops_request_misc=%7B%22request%5Fid%22%3A%22162087542416780261989980%22%2C%22scm%22%3A%2220140713.130102334.pc%5Fall.%22%7D&request_id=162087542416780261989980&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-8-108390003.first_rank_v2_pc_rank_v29&utm_term=cocos+点击。

需要注意的是,之前提到的屏幕canvas,会阻挡摄像机的raycast, 我的处理方法是将canvas的layer设置为IGNORE_RAYCAST层,这样就不会影响了。
还有一个就是,raycast只能检测到有box collider的物体,必须加上。

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。