【unity】【NGUI】当把挂在比如UILabel之类NGUI组件的对象对象池化的时候,出现各种问题的原因分析

来源:互联网 发布:网络suv有啥好处和坏处 编辑:程序博客网 时间:2024/06/05 11:48

关键词: UIWidget 中的  OnUpdate () 方法。


很多时候,我们在制作对象池,尤其是3d对象池的时候,会使用一个GameObject父节点来挂载对象池中的所有空闲对象(便于管理)。


最近我就遇到一个问题,当出于优化考虑,我把所有生物头顶的文字内容对象,全部对象池化的时候,出现了一种奇怪的现象。


当怪物死亡,即将删除的时候,我会将其头顶的文字对象移回对象池的父节点之下。而这个时候很诡异的,对象池的父节点竟然不翼而飞到了怪物的节点之下。


最终导致怪物删除的时候,将我的对象池也删除了。


经过排查,发现我的各种类型的对象池中,只有挂载了UILabel的对象的对象池才会出现这个问题。


于是我明确,这个问题一定是发生在NGUI中。


经过排查,终于发现问题。在基类UIWidget 中,当其发现自身的Tranform.parent发生变化时,会去检查其上层节点中是否有UIPanel组件(因为NGUI的机制中渲染是基于UIPanel来渲染的),不论你是否激活了这个UIWidget组件,该机制都会生效。


如果发现上层节点中全部都没有UIPanel组件,NGUI会针对父节点进行相应的处理,就导致了我遇到的这种情况。


解决方案是,在这类对象池的父节点上添加一个UIPanel组件。

阅读全文
0 0
原创粉丝点击