Unity3D开发不可忽视的细节问题

2015年08月07日 14:53 0 点赞 0 评论 更新于 2025-11-21 15:49

作者:大帅纷纭

原文:http://www.taidous.com/forum.php?mod=viewthread&tid=27856

开发中常见问题

  1. NGUI图集管理问题:有些很大的图和很小的图放在一起,会出现空白区域不可用的情况。
  2. U3D中美术资源大小问题:例如带Alpha通道的图文件大小会更大。
  3. 显示面板层次深度控制问题:当多个面板同时需要显示时,如何控制操作的面板处于最顶端。
  4. U3D自带消息机制对于MVC的优缺点
  5. 资源复用问题:涉及依赖打包与否,以及游戏内存针对场景和角色的管理问题。
  6. NGUI减少Calling问题

综合解决方案

NGUI相关优化

  1. UIPanel使用原则:每个UI应以1个UIPanel为标准。过多的UIPanel不仅会导致DrawCall增多,还会使UI逻辑变得混乱。
  2. UITexture使用建议:不要过多使用UITexture,因为每个UITexture都会增加1个DrawCall。通常,UITexture可作为背景图出现在UI上,无论是小背景还是大背景均可。
  3. 图集管理策略:NGUI的图集不宜过大,不要将多个UI元素放在一个图集里,否则在UI显示时加载资源的IO速度会非常慢。可以采用多种方式管理图集,例如每个UI一个图集;宽度大于300*100的图不做图集;一个系统模块使用2个图集等。甚至可以尝试以整个游戏为单位划分公共图集、按钮图集、头像图集、问题图集等,但这种方式可能因图集过大导致IO过慢而不适用。图集的管理方式应根据项目需求进行调整,关键在于理解程序读取资源时的IO操作时间。
  4. 减少UI更改:尽量减少不必要的UI更改,因为NGUI一旦有UI进行更改,就需要重新绘制MESH和贴图,重绘操作比较耗费CPU资源。
  5. 动态操作处理:NGUI对于动态的移动、旋转等UI操作支持性较差,操作过多会导致屏幕卡顿。解决办法是自己用程序生成面片,使面片的渲染不再受NGUI控制。

项目测试与UI自适应

  1. 测试分辨率选择:在开发过程中,尽量使用Free分辨率来测试项目UI的屏幕自适应效果,避免上线后才发现自适应问题。
  2. UI屏幕自适应代码
    float defaultWHRate = 800f / 480f;
    float ScreenWHRate = (float)Screen.width / (float)Screen.height;
    bool isUseHResize = defaultWHRate >= ScreenWHRate ? false : true;
    UIRoot root = GameObject.Find("ROOT").GetComponent<UIRoot>();
    if (!isUseHResize)
    {
    float curScreenH = (float)Screen.width / defaultWHRate;
    float Hrate = curScreenH / Screen.height;
    root.manualHeight = (int)(480f / Hrate);
    }
    else
    {
    root.manualHeight = 480;
    }
    

UI界面管理

  1. 界面拆分与锚点固定:将UI界面进行拆分,并固定各个锚点,如:上、左上、右上、中、左中、右中、下、左下、右下。
  2. UI内存管理:要充分管理游戏中的UI,过多的UI会导致内存加速增长,而频繁销毁不用的UI会使IO过于频繁,降低运行速度。可以找到两者的中间态,为隐藏的UI设置一个缓冲池,当某个UI隐藏时,判断是否有需要销毁的UI;也可以实时监控隐藏的UI,销毁内存驻留时间过长的UI。
  3. 图标处理:对于头像、物品等数量较多的图标,可以打成几个图集,并按一定规则排列,以减小文件大小,减少一次性读取的IO时间。

其他优化建议

  1. 避免使用动态字体:游戏中应尽可能不使用动态字体,因为动态字体每次都会进行IO操作读取相应的图片,这是NGUI的一个问题,会耗费CPU和内存资源。
  2. 设置脚本执行次序:在U3D的Project setting -> Script Execution Order中设置脚本执行次序。由于NGUI以UIPanel为主要渲染入口,所有关于游戏渲染处理的程序最好放在渲染之后,即UIPanel之后。UIPanel以LateUpdate为接口入口,因此关于渲染方面的程序还需斟酌是否放在LateUpdate里。

美术资源大小优化

  1. 图片尺寸选择:2的N次方大小的图片会得到引擎更大的支持,包括更高的压缩比率、更低的内存消耗和更小的打包压缩大小。
  2. 减小图片占用大小和内存的方式:可以通过改变图片大小(Maxsize)、色彩位数(16位、32位)以及使用压缩算法(PVRC)等方式来实现。

作者信息

洞悉

洞悉

共发布了 3994 篇文章