博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记一次Selectable的误用
阅读量:6860 次
发布时间:2019-06-26

本文共 938 字,大约阅读时间需要 3 分钟。

#### 记一次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,并且用接口控制其子物体显隐时.

转载于:https://www.cnblogs.com/Fallever/p/10018049.html

你可能感兴趣的文章
yii 邮箱封装
查看>>
浅谈UI自动化测试
查看>>
认证模式之Spnego模式
查看>>
对象逆序列化报错:java.lang.ClassNotFoundException
查看>>
iOS - UITableView加载网络图片 cell适应图片高度
查看>>
DocFX生成PDF文档
查看>>
运营活动需求实现
查看>>
代理(Proxy)和反射(Reflection)
查看>>
隐藏当前Activity而不关闭
查看>>
第三百四十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器...
查看>>
温故而知新-String类
查看>>
JS控制div跳转到指定的位置的几种解决方案总结
查看>>
《图说VR》——HTC Vive控制器按键事件解耦使用
查看>>
【Java学习笔记之十一】Java中常用的8大排序算法详解总结
查看>>
android studio使用真机测试时点击Debug调试模式时报Error running app:No target device found,点击运行模式却是启动正常的...
查看>>
洛谷 P1553 数字反转(升级版)【字符串+STL stack】
查看>>
【javascript】异步编年史,从“纯回调”到Promise
查看>>
C# WinForm开发系列 - Form/Window
查看>>
python 读取单所有json数据写入mongodb(单个)
查看>>
ZooKeeper可视化Web管理工具收集(待实践)
查看>>