ngui制作ui界面打开太慢解决方法.docx

ngui制作ui界面打开太慢解决方法.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
NGUI制作UI,界面打开太慢解决办法 Uniyt3D利用NGUI打开界面太慢了, 起初一直以为是 unity的问题,最近经过我的全面测试我发现这和 unity没有关系。 一般一个比较复杂的界面大概需要 150个GameObject ? 或者UlSprite 。 我用NGUI直接载入发现竟然需要 250多毫秒,仅仅只是两张小图。同样的 GameObject 我用unity2d 的Sprite载入只需要70多毫米,可见 Unity2d的效率要比NGUI高多少。我可能说的不完全对,因为 U3D是闭源的,我只能猜测。 再普及一下基础知识: GameObject go = GameObject.Instantiate(Resources.Load( “ prefabName ” )) as GameObject; go.AddComp onen t<Test>(); 我想上面这一行代码,大家应该再也熟悉不过了。 实例化一个Prefab,然后给它身上帮一条脚本。如下图 所示,我用的是 红米作为测试机器。 实例化对象我们可以拆成 4部分。我用NGUI加载了 150个UlSpirte = 41 + 4 + 30 + 194 = 269 毫秒, 一般打开界面超过 500毫秒的话用户就会明显感觉卡顿了。 而我这个仅仅是一张图而已,事实证明 NGUI加载太慢了,到底为什么这么慢? Resources.Load 是一个”同步”耗时操作,Unity内部维护了资源的内存池,但是调用Load的时候Unity 会自动的把Prefab上所引用的资源在加入内存池,它不会重复加载资源。 也就是说当你加载相同的 UIAtlas的时候,只会第一次比较卡。你可以试试一些线上的 unity游戏,一般 第一次打开某界面的时候要比以后打开此界面时间长一些。 很多人认为加载慢的原因罪魁祸首是 In sta ntiate()。其实我告诉你它的时间反而是最快的,上面的截图我 相信就是最好的证明。 第一次Instantiate 要比以后执行Instantiate 要慢一些,可能 Unity在做一些特殊处理吧。 第一次添加脚本 添加脚本一般会有两种形式, 第一种是通过 AddComp onen t<Script> 的形式把脚本添加给游戏对象, 还 有一种是你的Prefab天生就带着这个脚本。 无论哪种加载时间都是一样的。 第一次加载脚本要比以后加载慢, 我觉得应该是和 Resources缓存池的原 理一样吧。 第二次以后的 GameObject.lnstantiate 和 AddComponent<Script> GameObject.Instantiate 就不用说了,它载入很快,这里要详细的说说 Script。 对!导致于你界面打开慢的原因就是 prefab上绑的脚本,罪魁祸首就是脚本。 同步它的脚AddComponent<Script> 以后或者?Prefab 上预先绑定的脚本。当你 GameObject.Instantiate() 同步 它的脚 方法执行的时候,并不是把脚本挂上去就完了,而它要等脚本里面的一些方法执行完毕才算结束。 脚本中有两个很典型的方法 Awake和OnEnable。当Prefab用Instantiate()方法载入的时候, 本必须执行完Awake和OnEnable两个方法以后才算完整载入。 那么如果你的脚本这里面有一些耗时操作,那么必然载入会慢了。。 void Awake() { for(int i =0 ;i <1000; i++) { } } void OnEnable() { for(int i =0 ;i <1000; i++) { } } 如果你在Awake() 或者OnEnable()方法里面继续去实例化对象, 继续绑定脚本,那么依然还需要把新实 例化对象的 Awake()和OnEnable()方法执行完毕才会结束。。。 这里并没有完,还有一个地方也会引起打开界面慢。代码中用 Pubilc声明的对象,然后是在编辑器拖拽 赋值。 public GameObject go; 拖拽赋值,如果是资源很大的话 unity需要load ,然而load就是一个同步耗时操作,那么它也会影响打 开界面的时间。 如下图所示,NGUI里面UISprite UlTexture UILabe 这三个脚本上面都有 public 绑定的对象。 NGUI 打开界面慢的罪魁祸首就在这里,我尝试把 public绑定的代码全部取消, 发现20几毫秒 就载入完成 了。。。 知道原因了,但是我们也没办法,因为不能随便乱改它的代码。。 ? 一定要把一个界面的所有 GameObject 做成一个Prefab,有些人不想用 unity的Prefab,想通过一种规 则程序运行时利用 Gam

文档评论(0)

dajiede + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档