内置的 pickfire 默认只在 meshrenderer 上触发相应的事件,为了性能和组件化的设计暂时并没有对应冒泡机制,你可以根据逻辑自定义pick的冒泡
let obj = new Object3D(); obj.name = 'clickable' // 比如自定义name,或者 obj.data 等辅助数据 obj.addChild(...) // 添加一些多级子节点,其中包括一些 mesh节点并添加了 ColliderComponent // 默认是不会触发的, 但可以手动 dispatchEvent 触发 obj.addEventListener(PointerEvent3D.PICK_CLICK, this.pickClick, this); // 以 click 为例,pickFire 统一添加 click 监听 view.pickFire.addEventListener(PointerEvent3D.PICK_CLICK, (e:PointerEvent3D)=>{ let target = e.target; // 根据自定义逻辑,自动向上查找父节点,冒泡点击事件 while(target.name !== 'clickable'){ target = target.parentObject // target.dispatchEvent(e) // 可以每一层都冒泡 dispatchEvent(e),但不推荐 } target.dispatchEvent(e) // 最终在 obj 上触发 PICK_CLICK 事件,也可以自定义任意 event }, this);