今天试验一个方案的时候遇到了一个UIButton的问题:按钮显示出来的时候Normal状态的颜色被设置成了Color.grey。正常情况下应该是Color.white,之前也从未遇到过这个问题,觉得挺奇怪的。
开始怀疑是不是代码里调用了设置按钮disable状态的方法,或者播放了TweenColor动画,但是经过一番搜索后无果。于是想着新建一个空的场景,里面只创建一个UIButton,排除其它因素的影响来看看它的表现是否正常。结果也是编辑器的状态下显示正常,而Play的时候TweenColor自动将其颜色由Color.white变为了Color.grey。
最后只能拿出UIButton的源码查看并调试了。UIButton的源码里有一个UpdateColor方法,它的作用正是通过TweenColor动画改变按钮颜色。
选择在此处下断,发现UIButton在OnEnable的时候确实改变了按钮的颜色。
为什么会改变按钮颜色呢?原来OnEnable里判断isEnabled为false了,而isEnabled为false的情况有三种:1、UIButton为禁用状态;2、未设置collider;3、collider为禁用状态。
检查自己创建按钮的过程,为了快速试验方案只是创建了一个GameObject绑定上UISprite和UIButton,确实忘了设置collider。问题原因找到了,但仔细想想UIButton这里的细节可以做些更人性化的改动。因为通常情况下UI加入按钮肯定是要响应点击等事件的,而UIButton完成这些任务又必须要collider来配合,所以对于UIButton里collider未设置的情况可以输出一个warning来提醒使用者。