记录:相机priority导致的按钮点击无效

image
源码里对可监听事件的节点进行了排序,并且会按照相机的的priority从大到小的排序。
如果大priority的相机下的某个全屏节点有cc.blockinputevent组件,
就会导致小priority的相机里的所有按钮事件都无法点击。

记录一下花了2个小时查的问题。
如果有人遇到同样问题,可以借鉴排查。

1赞

请问一下这个问题是怎么解决的呀

你好,就是发现了一个高优先级摄像机下的全屏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;

}

}