NGUI讨论群:333417608
本文意在解释,为什么在2.7版本之前,总会出现某些label看不到,或者覆盖出现问题。
希望通过描述下基本原理,让大家了解到出问题的原因
NGUI是如何节省dc(draw call)的?
合并所有用到的图片到一个大的texture下,这样就尽可能的减少material的数量(material是产生dc的主要原因)
为什么我的label看不到?调整Z轴的话,要不所有label都看到,要不所有label都看不到?
这个问题一般出现在你复杂的UI中,仅仅用了一个Panel的时候。
比如UI的渲染层次结构是SpriteA(AtlasA)>LabelA(AtlasB)>SpriteB(AtlasA)>LabelB(AtlasB)。
这个时候,因为AtlasA用的MaterialA,AtlasB用的MaterialB,导致这个Panel里面的理论Material顺序就是:
MaterialA>MaterialB>MaterialA>MaterialB
但是Panel里面对于每个Material只会计算一次,所以真正的顺序就是MaterialA>MaterialB或者MaterialB>MaterialA。
这就是产生问题的原因。
如何解决?
增加panel后调整Z轴。比如上面的例子,你可以在SpriteB(AtlasA)>LabelB(AtlasB)的父节点上增加一个Panel。
这是最方便的方法。
这样会增加dc,但是没有不增加dc的解决办法。使用3.0不会有这个问题,是因为3.0会自动在Panel里面进行material的拆分,还是会增加dc。