zoukankan      html  css  js  c++  java
  • 记一次Selectable的误用

    记一次Selectable的误用


    记一次selectable的误用,现有个UI层级结构如下图所示:
    UI层级
    其在场景中位置如下所示,可以看到Button是Panel的子物体,开始时Button是隐藏的,并且他们处于不同的位置:
    场景位置
    将这样的一个脚本挂在Panel上面,Button序列化为Panel的子物体Button:
    img

    现场还原完毕,此时点击Panel,Button会显示出来,当Button显示出来后点击Button,Button永远不会触发相应OnClick事件,Console也永远不会有print的输出,通过查看EventSystem可以看到,当前选择的GameObject,永远是Panel.这是怎么一回事呢?
    因为不太清楚,UGUI的事件是怎么派发的,按我的猜测:当Button被点击后,因为Button继承自Selectable,此时神奇的事发生了,事件处理系统并没有优先派发Button的OnPointerClick,而是优先调用了Panel的OnDeselect(),因为Button也是一个Selectable,当一个SelectableSelect时,EventSystem总会先调用先前选中的Selectable的OnDeselect()函数,这个可以在Selectable的源码中了解到,然后调用后Button就被隐藏了,然后莫名的Button的点击事件又被传递到了Panel上,Panel的OnSelect()被调用,Buton又被显示了出来.
    所以在整个过程中看到的是:Buton一直显示着,但是Button的事件永远没用被触发.在我看来这是一次Selectable的误用,查看Selectable的源码,Selectable主要也是实现了GameObject被选中后的视觉变化.不应该同时使用Select的OnSelectOnDeselect,尤其是在上述的Selectable的物体上挂着另一个Selectable,并且用接口控制其子物体显隐时.

  • 相关阅读:
    示波器测量电源的纹波
    hdoj 2717 Catch That Cow
    hdoj 1548 A strange lift
    hdoj 4586 Play the Dice
    zoj 2095 Divisor Summation
    hdoj 4704 Sum
    router-link传参
    字体自适应
    横向滚动div
    vue路由
  • 原文地址:https://www.cnblogs.com/Fallever/p/10018049.html
Copyright © 2011-2022 走看看