Unity 开发规范

1. 编码(引擎相关)

100 禁止通过 new 的方式实例化 MonoBehaviour 的派生类,否则无法得到引擎有效的 管理。规范等级S

101 禁止在update,fixedupdate,lateupdate,ongui等频繁调用的逻辑中使用协程。规 范等级 S

102 禁止使用 Resources.Load 加载资源。个别特殊情况除外。规范等级S

103 禁止使用 Linq。规范等级 S

120 禁止使用 Invoke("SwapPanel", 2); 来实现延迟调用。规范等级A

121 禁止逐帧对Find, GetComponent 等引擎接口族调用。如有此类需求,须将结果缓 存供后续使用。规范等级A

122 禁止逐帧对GameObject.transform 属性的访问。如有此类需求,须将transform 的引用 缓存。规范等级A

123 必须使用GetInstanceID 代替 UnityEngine.Object 引用进行比较或作为散列表数据类型如 Dictionary 和 HashSet 的key。 规范等级A

123 当设置 GameObject 对象之间的父子关系时,如果仅关注逻辑上的层次关系而无需保持 子对象的空间方位,则应使用 SetParent(parent, false)避免空间转换的性能消耗。 规范等级 A

124 代码中需要访问到 Transform 组件的位置数据时,尽可能使用localPosition 代替对 position 属性的访问。规范等级A 
125 尽可能避免使用协程。Unity 的协程使用迭代器实现会分配堆内存。规范等级A 

126 尽可能避免使用MeshCollider 组件。如有此类需求也应尽可能减少网格碰撞体的面数, 或者使用Sphere、Box 和Capsule 的组合来替代之。规范等级A

127 使用导航网格时,应尽可能避免使用 Obstacle 模拟动态障碍物,否则对 CPU 性能冲 击很大。如有此需求建议使用碰撞体代替。规范等级A

140 禁止使用接受字符串参数的GetComponent  重载方法。规范等级B 141 禁止在MonoBehaviour 的派生类中存在被引擎高频回调的空方法,如:Update、 
 
142 必须使用 CompareTag 接口比较Unity GameObject 的Tag。B 143 避免在MonoBehaviour 的派生类中存在Awake、Start、OnEnable、OnDestroy 等空方 法。规范等级B 144 尽可能减少UnityEngine.Object 的 null 比较。规范等级B 160 建议合理使用 OnBecameInvisible、OnBecameVisible、OnWillRenderObject 类似的引擎 回调来避免不必要的渲染和计算。规范等级C 
 
2. 编码(引擎无关)

200 必须对可能造成功能失效的,影响流程的代码块添加异常捕获。规范等级S

201 禁止高频的字符串拼接。如无法避免,必须使用StringBuilder 代替“+”操作符进行字符 串进行拼接。规范等级S

120  尽可能将 CPU 占用高的逻辑代码分帧处理平摊 CPU 压力。规范等级A

221 尽可能将计算量较大的运算放到子线程中进行,避免阻塞主线程(比如寻路等算 法)。规范等级 A

222 Delegate 回调方法必须适时的解注册,否则回调方法所属的对象是会被一直引用,继 而会引起该对象所引用到的资源无法得到释放。 规范等级 A

240 尽量避免使用反射。 规范等级B

241 尽量避免使用可变数量参数(param object[] args),避免装箱拆箱。 规范等级B

242 禁止没有计算需求的变量赋值或者计算。 规范等级B

243 简单条件判断尽量使用三目运算符:b ? x : y。 规范等级B

244 注意 List 等容器常用接口复杂度,尽可能尾移除,批量移除RemoveRange 等。规范等级 B

245 在频繁查询数据列表时,建议使用 Hashset、Hashtable 查找时间复杂度低的数据结构, 避免使用 List。规范等级 B

246  尽可能为快速产生和消灭的大量对象建立缓冲池。规范等级B

260 使用可变长容器时,建议根据预估容量进行初始化。规范等级C

261 循环中寻找符合的条件应该适时的使用break 跳出。 规范等级C

262 尽可能将一些内存占用低但为数众多、功能简单的小对象定义为结构体(struct)而非 类(class)。规范等级 C

263 尽可能减少函数调用栈,用x = (x > 0 ? x : -x);代替x = Mathf.Abs(x)。规范等级 C

264 尽可能将类或函数声明为sealed,IL2CPP 会对sealed 的类或函数进行优化,变虚函数 调用为直接函数调用。规范等级C 
3. UI

320 禁止非图集贴图资源不合理的留白。会影响UGUI  运行时自动合批。规范等级A

321 资源设置UI 的贴图资源禁止勾选Generate Mip Maps。规范等级 A

322 禁止使用修改Alpha  值的方式来隐藏界面。规范等级A

323 尽可能降低Release  版中图集留白,提高贴图利用率。规范等级A

324 尽可能将图集中大的图片改为底图加载。规范等级A

340  建议同一 Canvas 中使用到的图集数量控制在三个以内。规范等级B

360  建议合理规划公共图集。在内存占用、加载频度和引用复杂度间确定合理的平衡点。 规范等级 C 
 
4. 渲染

400   禁止匿名GrabPass。如需使用到 GrabPass 必须命名并尽可能复用。规范等级S

420  游戏发布时必须将游戏锁定至合适的帧率(建议 30 帧)。规范等级A

421 Shader 中尽可能减少多Pass 渲染,除非必须这么做。规范等级A

422  尽可能降低Release 版中 Shader 中Keyword 数量。规范等级A

423  尽可能降低SkinnedMeshRenderer 组件的数量。 规范等级A

441   禁止逐帧直接使用名称对Shader Uniform 量进行更新。规范等级B

442 尽量避免在Shader 中使用复杂的计算如:pow,sin,cos,tan,log 等。规范等级B

443 建议在Shader 中采用预混合或实时混合纹理的方式代替实时地多次纹理采样。规范等 级B

444 移动平台的Shader 编码一定要考虑到数据精度(float/half/fixed)的合理使用。规范等 级B

445 应尽可能减少每帧Material.GetXX/Material.SetXX 的次数,比如把多个 uniform half 变 量合并为 uniform half 4。规范等级B 
 
5. 动画 
540 尽可能避免将Animator 的 CullingMode 属性设置为Always,对于不使用RootMotion 的 项目建议选择 CullCompletely。规范等级 B 
 
6. 物理

640   尽可能避免使用物理引擎。建议自行编码模拟物理效果。规范等级B 641 使用物理模块的游戏,建议在PhysicsManager 中设置矩阵,会有较大的性能提升。规 范等级B 
 
7. 音频 
720 如使用第 3 方音频插件,需禁用FMOD 模块(Edit->Project Settings->Audio->Disable Unity Audio)。规范等级 A 740 若不需要立体音效,音频导入设置需勾选Force to Mono(注:制作音频时就应该按照 单通道制作)。规范等级B 
 
8. 资源

820 音频格式:IOS 平台一般使用mp3,android 平台一般使用 Vorbis。规范等级 A 821 无需由逻辑代码访问的渲染资源禁止勾选Read/Write Enabled,如网格和贴图。规范等 级A 
822 导入蒙皮网格模型时建议开启 Optimize GameObject 优化选项,可极大的降低骨骼层 次复杂度,优化 CPU 性能。规范等级A 823 无动作模型资源导入必须将Animation Type 设置为None。否则会导致游戏对象挂载不 必要的动画脚本,大量的话会严重影响消耗 CPU 计算。规范等级A 824 导入的模型如果无需用到法线和切线,必须将导入设置中的Normals 和 Tangents 选 项设置为None。规范等级A 825 导入的模型如果无需参与Unity Lightmap 烘焙,必须将导入设置中的Generate Lightmap UVs 选项设置为None。规范等级A 
 
9. 发包

900  禁止在Release 版中存在任何 OnGUI 相关代码。规范等级S

901  禁止在Release 版中存在任何日常调试相关的 UnityEngine.Debug 类日志输出。规范等级 S

902 禁止在Release 版中开启"Development Build"和"Script Debugging"选项。规范等级 S

923  禁止在Release 版中使用引擎提供的SendMessage 方法。规范等级A 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Unity开发是一种基于游戏引擎的软件开发方式,为了能够顺利地进行Unity开发,制定一份规范开发文档是非常必要的。下面是Unity开发规范文档的一些内容。 1.项目目录结构:明确规定项目的目录结构,包括存放脚本、资源、场景等的文件夹位置和命名规范,便于开发人员统一管理和维护项目。 2.命名规范:统一约定脚本、变量、函数等的命名方式,使用有意义的名称,便于其他开发人员快速理解代码和功能。 3.代码风格:规范代码的缩进、换行、注释等风格,提高代码的可读性和可维护性。 4.资源管理:明确规定资源的命名方式和路径,防止重名和混乱。对于资源的导入和使用要注意优化和节约内存。 5.代码结构:统一规范代码的结构和组织方式,如使用面向对象思想进行模块化设计,方便后期的扩展和维护。 6.版本控制:使用版本控制工具(如Git)管理代码的版本,确保团队成员之间的协作和代码的安全。 7.性能优化:提供性能优化的建议和规范,如避免频繁的资源加载、使用对象池等,提高游戏的运行效率和流畅度。 8.错误处理与异常处理:明确规定在开发过程中的错误和异常处理方式,如合理使用日志、异常处理和断言等,保证程序的稳定性和可靠性。 这些是Unity开发规范文档的基本内容,通过遵守开发规范,可以提高团队合作效率,减少代码冲突和错误,保证项目的顺利进行和高质量的交付。 ### 回答2: Unity是一款强大的游戏开发引擎,为了提高开发效率和代码的可维护性,编写一份规范文档是非常有必要的。下面是Unity开发规范文档的主要内容: 1. 命名规范:对于脚本、场景、游戏对象和其他资源的命名都需要统一规范,采用驼峰命名法或下划线区分单词,以提高代码的可读性和识别性。 2. 文件和目录结构:为了方便团队协作和项目管理,需要制定统一的文件和目录结构,例如将脚本文件放在统一的Scripts目录下,资源文件放在Resources目录下等。 3. 编码风格:规定统一的代码缩进、换行、注释等风格,以提高代码的可读性和维护性,保证整个项目的一致性。 4. 脚本规范:规定脚本的模块划分、变量和函数命名规范,避免重复代码和冗余代码的产生,提供代码复用性和可扩展性。 5. 场景规范:规定场景命名、加载和切换的规范,避免场景文件冗杂和加载资源的重复,提高游戏性能。 6. 资源管理:规定资源的导入、压缩和使用规范,减少资源占用和内存泄漏的风险,提高游戏运行的稳定性和流畅性。 7. 版本控制:制定统一的版本控制规范,使用合适的版本控制工具进行代码管理和团队协作。 通过遵守这些规范,可以提高团队合作效率,减少代码冲突和错误,并且方便后续的维护和迭代开发。因此,制定并遵守Unity开发规范文档是非常重要的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值