转自:http://blog.csdn.net/leonwei/article/details/18042603

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

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

屏幕特效

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

实时的阴影

2优化建议

2.1渲染

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

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

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

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

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

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

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不要超过3个material

3.      骨骼数量不要超过30

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

2.2物理

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

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

3.不要使用mesh collider

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

2.3脚本编写

1.尽量不要动态的instantiate和destroy 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上尽量使用PVRTC,android上使用ETC

Unity开发-你必须知道的优化建议的更多相关文章

  1. Unity 几种优化建议

    转: http://user.qzone.qq.com/289422269/blog/1453815561?ptlang=2052 Unity 几种优化建议 最简单的优化建议: 1.PC平台的话保持场 ...

  2. unity优化建议

    使用Profiler工具分析内存占用情况 System.ExecutableAndDlls:系统可执行程序和DLL,是只读的内存,用来执行所有的脚本和DLL引用.不同平台和不同硬件得到的值会不一样,可 ...

  3. Unity开发Android应用优化指南(上)

    http://forum.china.unity3d.com/thread-27037-1-2.html 如今越来越多的开发者使用Unity开发Android及iOS项目,开发过程中难免会遇到一些性能 ...

  4. Unity开发Android应用优化指南(下)

    http://forum.china.unity3d.com/thread-27044-1-1.html 在Unity开发Android应用优化指南(上)一文中,从游戏性能,脚本等方面进行了分析和总结 ...

  5. Unity开发MMOARPG游戏解决方案

    http://www.csdn.net/article/2015-05-07/2824634 天神互动是一家已经上市的以研发MMOARPG游戏为主的技术公司,<苍穹变>是天神互动研发的第一 ...

  6. .NET程序的性能要领和优化建议

    前几天在老赵的博客上看到,Bill Chiles (Roslyn 编译器的Program Manager)写了一篇文章叫做<Essential Performance Facts and .NE ...

  7. 【使用Unity开发Windows Phone上的2D游戏】(1)千里之行始于足下

    写在前面的 其实这个名字起得不太欠当,Unity本身是很强大的工具,可以部署到很多个平台,而不仅仅是可以开发Windows Phone上的游戏. 只不过本人是Windows Phone 应用开发出身, ...

  8. Unity开发Android应用程序:调用安卓应用程序功能

    开发环境: Eclipse3.4 + adt12 + jdk6 + AndroidSDK2.2 Unity3.4 + windows7 测试设备: HTC Desire HD 本文要涉及到的几个重点问 ...

  9. Android代码内存优化建议-OnTrimMemory优化

    原文  http://androidperformance.com/2015/07/20/Android代码内存优化建议-OnTrimMemory优化/ OnTrimMemory 回调是 Androi ...

随机推荐

  1. 常用机器视觉工具----图像分析工具(blob分析)

    http://blog.sina.com.cn/s/blog_67cc4eb70100ivnt.html Blob分析:Blob分析目的在于对图像中的2-D形状进行检测和分析,得到诸如目标位置.形状. ...

  2. Knockoutjs快速入门(经典)

    Knockoutjs是一个JavaScript实现的MVVM框架.主要有如下几个功能: 1. Declarative bindings 2. Observables and dependency tr ...

  3. css属性设置

    css在线编辑工具地址:http://tool.chinaz.com/Tools/CssDesigner.aspx 案例详情: http://dongtianee.sinaapp.com/index. ...

  4. myeclipse+tomcat内存溢出

  5. MFC学习-第一课 MFC运行机制

    最近由于兴趣爱好,学习了孙鑫的MFC教程的第一课.看完视频了,自己便用visual studio 2010尝试了MFC编程,其中遇到了一些问题. 1.vs2010不像vs6.0那样可以新建一个空的MF ...

  6. DataReader和DataSet的异同

    DataReader:使用时始终占用SqlConnection,在线操作数据库:每次只在内存中加载一条数据,所以占用的内存是很小的:是只进的. 只读的. DataSet:则是将数据一次性加载在内存中. ...

  7. SQL语句注入

    1:       select *from user where username='admin' and password='123456'  or 1='1';    万能密码 2:       ...

  8. git 推送

    echo "# shops" >> README.md git init git add README.md git commit -m "first com ...

  9. CodeForces 689B Mike and Shortcuts (BFS or 最短路)

    题目链接:http://codeforces.com/problemset/problem/689/B 题目大意: 留坑 明天中秋~

  10. js正则,电话,邮箱

    1. <script type="text/javascript"> var str="Is this all th05777-89856825ere is5 ...