收藏 分享(赏)

NGUI制作UI界面打开太慢解决方法.doc

上传人:精品资料 文档编号:8887326 上传时间:2019-07-15 格式:DOC 页数:10 大小:92KB
下载 相关 举报
NGUI制作UI界面打开太慢解决方法.doc_第1页
第1页 / 共10页
NGUI制作UI界面打开太慢解决方法.doc_第2页
第2页 / 共10页
NGUI制作UI界面打开太慢解决方法.doc_第3页
第3页 / 共10页
NGUI制作UI界面打开太慢解决方法.doc_第4页
第4页 / 共10页
NGUI制作UI界面打开太慢解决方法.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、NGUI制作 UI,界面打开太慢解决办法Uniyt3D 利用 NGUI 打开界面太慢了,起初一直以为是 unity 的问题,最近经过我的全面测试我发现这和 unity 没有关系。一般一个比较复杂的界面大概需要 150 个 GameObject 或者 UISprite 。我用 NGUI 直接载入发现竟然需要 250 多毫秒,仅仅只是两张小图。同样的GameObject 我用 unity2d 的 Sprite 载入只需要 70 多毫米,可见 Unity2d 的效率要比NGUI 高多少。我可能说的不完全对,因为 U3D 是闭源的,我只能猜测。再普及一下基础知识:GameObject go = Gam

2、eObject.Instantiate(Resources.Load(“prefabName”) as GameObject;go.AddComponent();我想上面这一行代码,大家应该再也熟悉不过了。实例化一个 Prefab,然后给它身上帮一条脚本。如下图所示,我用的是 红米作为测试机器。实例化对象我们可以拆成 4 部分。我用 NGUI 加载了 150 个 UISpirte = 41 + 4 + 30 + 194 = 269 毫秒,一般打开界面超过 500 毫秒的 话用户就会明显感觉卡顿了。而我这个仅仅是一张图而已,事实证明 NGUI 加载太慢了,到底为什么这么慢?1.Resources

3、.LoadResources.Load 是一个”同步”耗时操作,Unity 内部维护了资源的内存池,但是调用Load 的时候 Unity 会自动的把 Prefab 上所引用的资源在加入内存池,它不会重复加载资源。也就是说当你加载相同的 UIAtlas 的时候,只会第一次比较卡。你可以试试一些线上的unity 游戏,一般第一次打开某界面的时候要比以后打开此界面时间长一些。2.GameObject.Instantiate很多人认为加载慢的原因罪魁祸首是 Instantiate()。其实我告诉你它的时间反而是最快的,上面的截图我相信就是最好的证明。第一次 Instantiate 要比以后执行 Ins

4、tantiate 要慢一些,可能 Unity 在做一些特殊处理吧。3.第一次添加脚本添加脚本一般会有两种形式,第一种是通过 AddComponent的形式把脚本添加给游戏对象,还有一种是你的 Prefab 天生就带着这个脚本。无论哪种加载时间都是一样的。第一次加载脚本要比以后加载慢,我觉得应该是和Resources 缓存池的原理一样吧。4.第二次以后的 GameObject.Instantiate 和 AddComponentGameObject.Instantiate 就不用说了,它载入很快,这里要详细的说说 Script。对!导致于你界面打开慢的原因就是 prefab 上绑的脚本,罪魁祸首

5、就是脚本。AddComponent 以后 或者 Prefab 上预先绑定的脚本。当你GameObject.Instantiate()同步方法执行的时候,并不是把脚本挂上去就完了,而它要等脚本里面的一些方法执行完毕才算结束。脚本中有两个很典型的方法 Awake 和 OnEnable。当 Prefab 用 Instantiate()方法载入的时候,它的脚本必须执行完 Awake 和 OnEnable 两个方法以后才算完整载入。那么如果你的脚本这里面有一些耗时操作,那么必然载入会慢了。void Awake()for(int i =0 ;i 来生成界面的树状结构。我做过测试如果单纯加载一个Prefab

6、 和 代码动态生成对应树状结构 前者要比后者快 30%左右。所以如果做 UI 编辑器的话,一定要先把 Prefab 生成出来,一定要只加载一个 Prefab。至于 Unity 的 Sprite 载入 为什么要比 NGUI 的 Sprite 载入快,那么唯一可以解释的就是Unity 可能后台用的是 C 语言,而 NGUI 用的是纯 C#,从执行效率上 C 会快很多,所以我们还是早日期待 Unity 可以自身完美的解决做界面的问题。unity4.6 预览版看起来很赞,不过我更期待 unity5 的到来。最后我们在说说怎么让 NGUI 打开界面的速度能快一些。1.修改界面结构,尽可能让界面上绑定 U

7、ISprite UITexture UILabe 这样的游戏对象少一些。2.如果界面没法拆开,那么就把界面的 prefab 拆成多个,比如底框是一个 Prefab , 内容是一个 Prefab ,列表是一个 Prefab ,这样打开界面的时候用协同任务 一个一个打开,这样用户就不会感觉到界面卡顿了。到这里,在 Unity3D 中利用 NGUI 制作 UI 的过程中,打开界面太慢的解决办法就全部说完了,查看更多 Unity3D 相关教程,可以访问,我学院网 Unity 教程相关标签!四、 昰罘昰这样分罘开合罘来才叫做真噯五、 时间长了,没有恨啦,只有满满的遗憾,和懊悔,也许再恨一个人,时间长也会

8、成为想念吧。六、 最后,最后,还是寂寞依旧。七、 有一天你会发现 、 我是多么的重要八、 爱一个人是幸福的累。恨一个人是痛苦的累。头疼。但还是祝福你。你的世界没有我也许会更好。九、 我还在原地等你,你却已经忘记曾经来过这里十、 没有什么过不去,只是再也回不去。十一、 如若我比她先认识你,是不是你会许我一个地久天长。十二、 每个人的生命中都有一个刺青爱人,大火不能熄灭,众水不能淹没。十三、 不是因为讨厌一个人的点点滴滴才开始讨厌 ta,是因为讨厌一个人才讨厌 ta 的点点滴滴,一句话,一个表情都讨厌。十四、 背道而驰的感觉你懂吗?讨厌一个人很累,要捡起所有点点滴滴恨一个人需要浪费美丽的时间,所以

9、忘记所有才是漂亮的活法。行动与口头承诺。所做,所说,所厌烦的。一点一点地暴露无疑 陌生人,朋友,恋人。只不过是飞蛾成蝶的过程到飞蛾扑火消失殆尽。直到变成嗜之以鼻的日子。十五、 每处一个对象,就伤一个人,那么沵活着是来伤人/.?十六、 越来越理解老牟说讨厌一个人吃饭了。没错,是认识很多人,也有些许好友,但并不是谁你都想约饭的。一个人,一盒饭,一台电视,好惨的。十七、 你能不能对我在冷漠一点呢,至少让我以为你不在爱我了十八、 曾几何时,我们以为自己深深的爱着的一个人。后来,我们才知道,那不是爱,那只是对自己说谎。十九、 恨一个人的感觉,可以很透彻。二十、 如果世界上有后悔药,那我宁愿一切如初。二十一、 我希望有个人能明白我冷言冷语中的温暖。二十二、 我永远都忘不了你笑着对我说不用了,永远都忘不了你留给我冷冷的背影,只要我活着我绝不会再让我的感情变的廉价,只要我活着我就会告诉我自己,在我心底有一个人,我恨她,人们都说有多深的爱就有多深恨,那么,从现在起就让我恨你,看看我有多爱你,尽管恨一个人的过程是痛苦,那也值!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报