Unity开发-你必须知道的优化建议

简介:

最近研究U3D开发,个人认为,精通一种新的技术,最快最好的方法就是看它的document,而且个人习惯不喜欢看中文的资料,原汁原味的东西是最正确的,一翻译过来很多东西就都不那么准确了。于是通读了unity的官方manuel,最后面几章都是精华,里面给了非常非常多的官方的优化建议,尤其是做移动平台的开发,这些建议就是非常重要的。我将官方manuel advanced后面的那几个章节的东西提炼了一下出来,总结了这样一些优化tips:

 

1不是每个主流手机都支持的技术(就是如果可以不用就不用或有备选方案)

屏幕特效

动态的pixel光照计算(如法线)

实时的阴影

 

2优化建议

2.1渲染

1.不使用或少使用动态光照,使用light mappinglight probes(光照探头)

2.不使用法线贴图(或者只在主角身上使用),静态物体尽量将法线渲染到贴图

3.不适用稠密的粒子,尽量使用UV动画

4.不使用fog,使用渐变的面片(参考shadow gun

5.不要使用alpha –test(如那些cutout shader),使用alpha-blend代替

6.使用尽量少的material,使用尽量少的passrender次数,如反射、阴影这些操作

7.如有必要,使用Per-Layer Cull Distances,Camera.layerCullDistances

8.只使用mobile组里面的那些预置shader

9.使用occlusion culling

11.远处的物体绘制在skybox

12.使用drawcall batching

        对于相邻动态物体:如果使用相同的shader,将texture合并

        对于静态物体,batching要求很高,详见Unity Manual>Advanced>Optimizing Graphics Performance>Draw Call Batching

 

规格上限

1.      每个模型只使用一个skinned mesh renderer

2.      每个mesh不要超过3material

3.      骨骼数量不要超过30

4.      面数在1500以内将得到好的效率

2.2物理

1.真实的物理(刚体)很消耗,不要轻易使用,尽量使用自己的代码模仿假的物理

2.对于投射物不要使用真实物理的碰撞和刚体,用自己的代码处理

3.不要使用mesh collider

4.在edit->project setting->time中调大FixedTimestep(真实物理的帧率)来减少cpu损耗

2.3脚本编写

1.尽量不要动态的instantiatedestroy object,使用object pool

2.尽量不要再update函数中做复杂计算,如有需要,可以隔N帧计算一次

3.不要动态的产生字符串,如Debug.Log("boo" + "hoo"),尽量预先创建好这些字符串资源

4.cache一些东西,在update里面尽量避免search,如GameObject.FindWithTag("")GetComponent这样的调用,可以在start中预先存起来

5.尽量减少函数调用栈,用x = (x > 0 ? x : -x);代替x = Mathf.Abs(x)

6.下面的代码是几个gc“噩梦”

 String的相加操作,会频繁申请内存并释放,导致gc频繁,使用System.Text.StringBuilder代替

   function ConcatExample(intArray: int[]) {

               var line = intArray[0].ToString();

 

               for (i = 1; i < intArray.Length; i++) {

                               line += ", " + intArray[i].ToString();

               }

 

               return line;

}

在函数中动态new array,最好将一个array、传进函数里修改

function RandomList(numElements: int) {
          var result = new float[numElements];
 
          for (i = 0; i < numElements; i++) {
                         result[i] = Random.value;
          }
 
          return result;
}

 

2.4 shader编写

1.数据类型

 fixed / lowp - for colors, lighting information and normals,

half / mediump - for texture UV coordinates,

float / highp - avoid in pixel shaders, fine to use in vertex shader for position calculations.

2.少使用的函数:pow,sin,cos等

2.4 GUI

1.不要使用内置的onGUii函数处理gui,使用其他方案,如NGUI

 

3.格式

1.贴图压缩格式:ios上尽量使用PVRTCandroid上使用ETC

目录
相关文章
|
4月前
|
存储 设计模式 监控
运用Unity Profiler定位内存泄漏并实施对象池管理优化内存使用
【7月更文第10天】在Unity游戏开发中,内存管理是至关重要的一个环节。内存泄漏不仅会导致游戏运行缓慢、卡顿,严重时甚至会引发崩溃。Unity Profiler作为一个强大的性能分析工具,能够帮助开发者深入理解应用程序的内存使用情况,从而定位并解决内存泄漏问题。同时,通过实施对象池管理策略,可以显著优化内存使用,提高游戏性能。本文将结合代码示例,详细介绍如何利用Unity Profiler定位内存泄漏,并实施对象池来优化内存使用。
200 0
|
3月前
|
算法 vr&ar C#
使用Unity进行虚拟现实开发:深入探索与实践
【8月更文挑战第24天】使用Unity进行虚拟现实开发是一个充满挑战和机遇的过程。通过掌握Unity的VR开发技术,你可以创造出令人惊叹的VR体验,为用户带来前所未有的沉浸感和乐趣。随着技术的不断进步和应用场景的不断拓展,VR开发的未来充满了无限可能。希望本文能为你提供有用的指导和启发!
|
2月前
|
图形学 C++ C#
Unity插件开发全攻略:从零起步教你用C++扩展游戏功能,解锁Unity新玩法的详细步骤与实战技巧大公开
【8月更文挑战第31天】Unity 是一款功能强大的游戏开发引擎,支持多平台发布并拥有丰富的插件生态系统。本文介绍 Unity 插件开发基础,帮助读者从零开始编写自定义插件以扩展其功能。插件通常用 C++ 编写,通过 Mono C# 运行时调用,需在不同平台上编译。文中详细讲解了开发环境搭建、简单插件编写及在 Unity 中调用的方法,包括创建 C# 封装脚本和处理跨平台问题,助力开发者提升游戏开发效率。
126 0
|
2月前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
135 0
|
3月前
|
开发者 图形学 iOS开发
掌握Unity的跨平台部署与发布秘籍,让你的游戏作品在多个平台上大放异彩——从基础设置到高级优化,深入解析一站式游戏开发解决方案的每一个细节,带你领略高效发布流程的魅力所在
【8月更文挑战第31天】跨平台游戏开发是当今游戏产业的热点,尤其在移动设备普及的背景下更为重要。作为领先的游戏开发引擎,Unity以其卓越的跨平台支持能力脱颖而出,能够将游戏轻松部署至iOS、Android、PC、Mac、Web及游戏主机等多个平台。本文通过杂文形式探讨Unity在各平台的部署与发布策略,并提供具体实例,涵盖项目设置、性能优化、打包流程及发布前准备等关键环节,助力开发者充分利用Unity的强大功能,实现多平台游戏开发。
87 0
|
3月前
|
vr&ar 图形学 开发者
步入未来科技前沿:全方位解读Unity在VR/AR开发中的应用技巧,带你轻松打造震撼人心的沉浸式虚拟现实与增强现实体验——附详细示例代码与实战指南
【8月更文挑战第31天】虚拟现实(VR)和增强现实(AR)技术正深刻改变生活,从教育、娱乐到医疗、工业,应用广泛。Unity作为强大的游戏开发引擎,适用于构建高质量的VR/AR应用,支持Oculus Rift、HTC Vive、Microsoft HoloLens、ARKit和ARCore等平台。本文将介绍如何使用Unity创建沉浸式虚拟体验,包括设置项目、添加相机、处理用户输入等,并通过具体示例代码展示实现过程。无论是完全沉浸式的VR体验,还是将数字内容叠加到现实世界的AR应用,Unity均提供了所需的一切工具。
110 0
|
3月前
|
开发者 图形学 UED
深度解析Unity游戏开发中的性能瓶颈与优化方案:从资源管理到代码执行,全方位提升你的游戏流畅度,让玩家体验飞跃性的顺滑——不止是技巧,更是艺术的追求
【8月更文挑战第31天】《Unity性能优化实战:让你的游戏流畅如飞》详细介绍了Unity游戏性能优化的关键技巧,涵盖资源管理、代码优化、场景管理和内存管理等方面。通过具体示例,如纹理打包、异步加载、协程使用及LOD技术,帮助开发者打造高效流畅的游戏体验。文中提供了实用代码片段,助力减少内存消耗、提升渲染效率,确保游戏运行丝滑顺畅。性能优化是一个持续过程,需不断测试调整以达最佳效果。
79 0
|
5月前
|
C# 图形学 C++
使用vscode开发C#+unity没有代码提示问题
使用vscode开发C#+unity没有代码提示问题
70 0
使用vscode开发C#+unity没有代码提示问题
|
5月前
|
图形学
【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏4(附项目源码)
【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏4(附项目源码)
69 0
|
5月前
|
图形学
【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏3(附项目源码)
【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏3(附项目源码)
51 0