Unity3D开发注意事项
2016-10-18 15:46
176 查看
最近给组里定Unity开发注意事项,参考了@陆泽西在群里分享的[前端开发规范],结合自己工作中的经验,整理一下,下面不少条款都是我们要求在开发中必须遵守的。
纹理压缩格式选择:Windows使用DXT1,IOS使用RGB PVR,安卓使用ETC1。
图片尽量使用纹理压缩,单独设置每个平台的压缩格式,如果不需要Alpha通道,请选RGB格式。
拆分Alpha通道,然后采用前面所述的纹理压缩格式,shader采样合图。
纹理宽/高必须为2的N次幂,否则会导致内存中双倍,大小不得超过2048。
资源预加载,空间换时间;资源卸载,垃圾回收(战斗等需要流畅操作中避免)。
做好图集管理。
做好特效优化,控制好粒子数,慎用fog效果。
很重要并常用的UI在关闭时,可以考虑移除摄影机范围。常用但不重要的UI在关闭时,可以使用SetActive(false)。
UI界面制作时,动静分离,动的放在一个UIPanel里,减少NGUI重建Mesh。
其它:列表item重用优化,unity原生代替ngui实现等。
脚步不使用时禁掉。
缓存多次使用的对象/组件。
Update中禁止使用foreach。因为装箱/拆箱导致GC,Array/List用for循环,字典用Enumerator。ps. Unity官方已经在着手解决这个很古老的bug了,5.5版本有望解决。
不要使用Linq表达式。LINQ内部会有New操作或使用foreach,从而产生GC。
协程会产生GC。
需要反复创建的对象,使用对象池。
struct做为Dictionary的Key的时候,要去实现IEquatable接口,不然每次Contains都会产生GC。
减少字符串拼接,用string.Format或StringBuilder代替+号。
临时变量减少堆对象使用,能采用栈对象就用栈对象。
用CompareTag(xx)代替obj.tag == xx。
减少网络收发,减少多线程,减少Update逻辑。
table创建时预填充,确定表大小。
大字符串连接中,应避免..,用table来模拟buffer,然后concat得到最终字符串。
Reuse,循环外构造对象。
资源:
图片统一为png格式,纹理属性:TextureType设为Advanced,2D纹理关闭Mipmap(size会增加33%),关闭Read/Write(会导致2倍内存),Wrap Mode为Clamp可避免黑边。纹理压缩格式选择:Windows使用DXT1,IOS使用RGB PVR,安卓使用ETC1。
图片尽量使用纹理压缩,单独设置每个平台的压缩格式,如果不需要Alpha通道,请选RGB格式。
拆分Alpha通道,然后采用前面所述的纹理压缩格式,shader采样合图。
纹理宽/高必须为2的N次幂,否则会导致内存中双倍,大小不得超过2048。
资源预加载,空间换时间;资源卸载,垃圾回收(战斗等需要流畅操作中避免)。
做好图集管理。
做好特效优化,控制好粒子数,慎用fog效果。
NGUI:
拼UI规划好Depth的范围,减少Altas或文字间的Depth交替,降低Draw Call。很重要并常用的UI在关闭时,可以考虑移除摄影机范围。常用但不重要的UI在关闭时,可以使用SetActive(false)。
UI界面制作时,动静分离,动的放在一个UIPanel里,减少NGUI重建Mesh。
其它:列表item重用优化,unity原生代替ngui实现等。
C#:
删除MonoBehaviour子类中不用的默认方法,像Start/Update等。脚步不使用时禁掉。
缓存多次使用的对象/组件。
Update中禁止使用foreach。因为装箱/拆箱导致GC,Array/List用for循环,字典用Enumerator。ps. Unity官方已经在着手解决这个很古老的bug了,5.5版本有望解决。
不要使用Linq表达式。LINQ内部会有New操作或使用foreach,从而产生GC。
协程会产生GC。
需要反复创建的对象,使用对象池。
struct做为Dictionary的Key的时候,要去实现IEquatable接口,不然每次Contains都会产生GC。
减少字符串拼接,用string.Format或StringBuilder代替+号。
临时变量减少堆对象使用,能采用栈对象就用栈对象。
用CompareTag(xx)代替obj.tag == xx。
减少网络收发,减少多线程,减少Update逻辑。
lua:
尽量使用local,相比global提升30%左右。table创建时预填充,确定表大小。
大字符串连接中,应避免..,用table来模拟buffer,然后concat得到最终字符串。
Reuse,循环外构造对象。
相关文章推荐
- Unity3D学习笔记(2)——Unity3D与3DMax结合开发注意事项
- Unity3D开发注意事项
- Unity3D 移动应用与C#开发注意事项(不定时更新)
- Unity3D开发Windows Store应用程序 注意事项
- unity基础开发----Unity3D的uniSWF注意事项
- Unity3d游戏开发注意事项
- unity3d开发之二:开发环境的搭建及c#注意事项
- Unity3D开发Windows Store应用程序 注意事项(官方)
- 跟我从零基础学习Unity3D开发--U3d脚本注意事项及两个基本函数的简单介绍
- BREW 开发的注意事项:
- ASP开发网页牢记注意事项
- 开发环境中biztalk项目设置注意事项
- WEB开发中代码自动格式化注意事项
- Asp.net &C#开发中的一些注意事项及小技巧
- 关于Java开发中使用Oracle数据库的一点注意事项
- 在Windows Vista安装.NET 2.0开发环境注意事项
- Windows NT 驱动程序开发人员提示 -- 应注意避免的事项
- .Net2005开发与COM组件交互注意事项
- Eclipse+WTP+Tomcat开发的几点注意事项(ZT)
- Windows NT 驱动程序开发人员提示——应注意避免的事项