Unity中实现IPointerClick涉及父物体与子物体的问题

Unity中实现IPointerClick涉及父物体与子物体的问题

  • 问题
  • 结论

问题

刚才写了个实现了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,但是我没有(懒得)验证。

你可能感兴趣的:(Unity,杂项)