
源码里对可监听事件的节点进行了排序,并且会按照相机的的priority从大到小的排序。
如果大priority的相机下的某个全屏节点有cc.blockinputevent组件,
就会导致小priority的相机里的所有按钮事件都无法点击。
记录一下花了2个小时查的问题。
如果有人遇到同样问题,可以借鉴排查。

源码里对可监听事件的节点进行了排序,并且会按照相机的的priority从大到小的排序。
如果大priority的相机下的某个全屏节点有cc.blockinputevent组件,
就会导致小priority的相机里的所有按钮事件都无法点击。
记录一下花了2个小时查的问题。
如果有人遇到同样问题,可以借鉴排查。
请问一下这个问题是怎么解决的呀
你好,就是发现了一个高优先级摄像机下的全屏blockinputevent节点,把那个删掉了,就满足业务需要了。
感谢分享!那如果需要在高优先级的摄像机内用到blockInputEvents组件的话该怎么办,我尝试设置带有blockinputEvents组件的节点为各个摄像机都渲染的layer,还是不行
挖个坟,同样遇到了这个问题,贴一个解决代码,只要把高相机层级的物体挂一个防止点击吞噬的组件,就可以继续传递事件了。
import { EventMouse } from ‘cc’;
import { _decorator, Component, EventTouch, Node, EventHandler } from ‘cc’;
const { ccclass, property } = _decorator;
@ccclass(‘DontBeSwallowed’)
export class DontBeSwallowed extends Component {
onLoad() {
this.node.on(Node.EventType.MOUSE_DOWN, this.dontBeSwallowed, this);
this.node.on(Node.EventType.MOUSE_MOVE, this.dontBeSwallowed, this);
this.node.on(Node.EventType.MOUSE_UP, this.dontBeSwallowed, this);
this.node.on(Node.EventType.TOUCH_START, this.dontBeSwallowed, this);
this.node.on(Node.EventType.TOUCH_MOVE, this.dontBeSwallowed, this);
this.node.on(Node.EventType.TOUCH_END, this.dontBeSwallowed, this);
this.node.on(Node.EventType.TOUCH_CANCEL, this.dontBeSwallowed, this);
}
onDestroy() {
this.node.off(Node.EventType.MOUSE_DOWN, this.dontBeSwallowed, this);
this.node.off(Node.EventType.MOUSE_MOVE, this.dontBeSwallowed, this);
this.node.off(Node.EventType.MOUSE_UP, this.dontBeSwallowed, this);
this.node.off(Node.EventType.TOUCH_START, this.dontBeSwallowed, this);
this.node.off(Node.EventType.TOUCH_MOVE, this.dontBeSwallowed, this);
this.node.off(Node.EventType.TOUCH_END, this.dontBeSwallowed, this);
this.node.off(Node.EventType.TOUCH_CANCEL, this.dontBeSwallowed, this);
}
dontBeSwallowed(event: EventMouse | EventTouch) {
event.preventSwallow = true;
}
}