问题
刚才写了个实现了IPointerClick接口的一个点击UI的简单小功能,单独测试了之后并没有问题,可以响应点击。
public void OnPointerClick(PointerEventData eventData)
{
// 切换显示内容
if (text.text == defaultText)
text.text = secondText;
else
text.text = defaultText;
}
但是把它应用到实际的场景上去后点击,这个函数并没有执行,取而代之的是执行了这个物体父物体上一个之前写过的OnPointerDown。感到奇怪,把UI画布单独移出来测试依旧没有问题,可以响应点击。于是就上网查了查
然后搜到了这篇博客,本来想点个赞,但是要登录。我好像没有注册账号,就算啦…
不过没有细看(感觉好多字懒得看了…),大概看了,还有看了下博主的结论。基本解答了我的疑惑。
结论
因为OnPointerClick本来就是要检测按下和抬起是否是同一个物体。如果父物体有实现了OnPointerDown,而子物体只实现了OnPointerClick的话,那么在Click检测是否是同一个物体的时候变成了父物体和子物体两个物体检测。导致本来点击子物体应该执行Click但是却没有执行。通过阅读UGUI的源码可以发现这个BUG。简单解决的方法就是把子物体改成OnPointerDown就好了,当然功能会有些许改变,但对我做的东西没有影响。原博主说也可以在子物体中加一个OnPointerDown,但是我没有(懒得)验证。