active=false 还能接收触摸事件的bug,搞一万年都没修复

resumeSystemEvents传成true, 自有原因(要利用父节点一次性暂停所有事件,必要时恢复), 问题是, 节点当前状态是active==false的,这个都不能阻拦事件触发吗?unity里面active==false, 基本相当于这个节点当前不存在, 是不会触发交互事件的

1.7版本native遇到过一次常驻节点active为false,但是其子节点的按钮阻挡了下面的点击事件(UI比较复杂)!

Unity 如果有 resumeSystemEvents,并且提供一样的参数,也会是一样的处理机制。这个就别纠结了,用户业务层完全能解决的事情。避免用 resumeSystemEvents 是最好的实践方式。

好吧~

这个问题在 1.7 中并没有解决,今天在把场景转换为prefab的时候,发现这个明明被关闭的prefab的子节点居然会监听到touchstart事件。我尝试弄一个简单的UI去重现,但是没有成功,貌似只有在复杂一点的UI结构中才会暴露。并且我们项目中并没有使用自己 resumeSystemEvents 接口,给node注册事件的时候,useCapture也是默认为false。 找了好一会才发现是这个问题,最后只能在ondisable时候去统一off节点上注册的事件,才屏蔽了这个问题。希望引擎组 能重视

解决方案:在背景层加一个覆盖屏幕的node,然后on监听就不会传下去了。

如果有重现方法也麻烦说一声~

NewProject.zip (551.4 KB)
遇到这个问题好几次了,1.8.1还是没有解决…
先点击 隐藏layout2 按钮,然后点击 隐藏或显示 按钮两次,点击已隐藏的layout2位置的按钮2,发现还是能够触发响应。

1赞

这个bug很严重。。。但不是不能解决的。。。加个屏蔽层应该也不能解决。。。那么如果想屏蔽,只有移除了,或者不要把按钮放在layout里。
这里的问题是,button的active=false,但是layout还在,它依然传递点击事件,然后派给了button。

我试了下你的demo,正常啊,隐藏的不会响应啊

我是web测试,native没测

请问你是什么平台上出现的问题

Mac平台下用的模拟器,iOS真机测试的时候也会出现这个情况…

我用web测试了一下,的确不会触发这个问题

居然是模拟器,有没有目标用户用模拟器,纠结这干啥

cocos的这个模拟器,表示从来不相信

模拟器和native平台是同步的,模拟器有问题,native就有问题。只用web测试的才会不准,一般游戏都不会在web上发吧。

谢谢你的测试 demo,我们查证一下。

模拟器行为和原生平台一致的。否则要这个模拟器干嘛。

把node.y = -10000能避免这个问题 显示在移回来