当一个 Node 移动到一个 Mask 节点下时,如果该节点下面有一个按钮,会导致点击穿透

设置父物体时会调用 NodeEventProcessor 的 reattach 方法,移动的节点会找到mask,index 为mask与该节点的层级差。并将其直接复制给所有子孙节点1

屏幕截图 2023-08-24 230116
但是!当点击时,节点的子节点按钮响应事件时会校验mask时,index校验错误,因为这个 index 并不是按钮与 mask 的层级差,而是父节点与mask层级差,导致始终差1 cocos-test.zip (15.6 KB) 我这里有一个测试工程,你点寄按钮被mask遮挡的部分,很明显发现有点击响应

阅读代码有几处问题与几处无法理解的代码

  1. 当创建一个mask,子节点孙子节点的masklist没有更新
  2. 当一个子节点也有mask的节点移动时,子节点的mask会失效,它搜索的永远是自己向上的节点树的mask
  3. masklist 的 index 到底有啥用?它为什么要校验mask是否是在它的节点树上?