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

4 篇文章 0 订阅

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,但是我没有(懒得)验证。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值