最近研究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优化] Unity CPU性能优化

    前段时间本人转战unity手游,由于作者(Chwen)之前参与端游开发,有些端游的经验可以直接移植到手游,比如项目框架架构.代码设计.部分性能分析,而对于移动终端而言,CPU.内存.显卡甚至电池等硬件 ...

  2. 【Unity优化】构建一个拒绝GC的List

    版权声明:本文为博主原创文章,欢迎转载.请保留博主链接:http://blog.csdn.net/andrewfan 上篇文章<[Unity优化]Unity中究竟能不能使用foreach?> ...

  3. 再议Unity优化

    0x00 前言 在很长一段时间里,Unity项目的开发者的优化指南上基本都会有一条关于使用GetCompnent方法获取组件的条目(例如14年我的这篇博客<深入浅出聊Unity3D项目优化:从D ...

  4. UNITY 优化之带Animator的Go.SetActive耗时问题,在手机上,这个问题似乎并不存在,因为优化了后手机上运行帧率并未明显提升

    UNITY 优化之带Animator的Go.SetActive耗时问题,在手机上,这个问题似乎并不存在,因为优化了后手机上运行帧率并未明显提升 经确认,这个问题在手机上依然存在,不过占的比例非常小.因 ...

  5. 面向英特尔® x86 平台的 Unity* 优化指南: 第 1 部分

    原文地址 目录 工具 Unity 分析器 GPA 系统分析器 GPA 帧分析器 如要充分发挥 x86 平台的作用,您可以在项目中进行多种性能优化,以最大限度地提升性能. 在本指南中,我们将展示 Uni ...

  6. (转载)Unity 优化总结

    Unity 优化总结 2017-03-10 | 发布 大海明月  zengfeng75@qq.com  | 分类 Unity  | 标签 Unity  优化 相关文档 UGUI 降低填充率技巧两则 U ...

  7. Unity优化之减少Drawcall

    简单来说,Drawcall就是屏幕渲染一次所需要的开销,为了较少消耗,提高性能,一般有以下几种方法. 一: 批处理 1.动态批处理 如果动态物体共用着相同的材质,那么Unity会自动对这些物体进行批处 ...

  8. Unity 优化

    1. 尽量避免每帧处理比如: function Update() { DoSomeThing(); } 可改为每5帧处理一次: function Update() { == ) { DoSomeThi ...

  9. 【Unity优化】Unity优化技巧进阶开篇

    版权声明:本文为博主原创文章,欢迎转载.请保留博主链接:http://blog.csdn.net/andrewfan 做游戏好多年了,关于游戏优化一直是令开发者头疼的一个问题.因为优化牵扯的内容很多, ...

随机推荐

  1. Leetcode: Encode String with Shortest Length && G面经

    Given a non-empty string, encode the string such that its encoded length is the shortest. The encodi ...

  2. 【C# 进阶】事件!直接上事件!

    http://www.tracefact.net/csharp-programming/delegates-and-events-in-csharp.aspx ZiYang 张,何许人也?看了他写的博 ...

  3. MFC获取Windows启动状态(正常启动、安全模式启动、网络安全模式启动)

    UINT nFlags = GetSystemMetrics(SM_CLEANBOOT); switch(nFlags) { : AfxMessageBox(TEXT("正常启动" ...

  4. window.onload和$(document).ready()的区别

    window.onload和$(document).ready()的区别,如下表所示   window.onload $(document).ready() 执行时间 在页面所有内容(图片.文件)加载 ...

  5. 通过代码获取res里生成R.java中的值

    引用:http://my.eoe.cn/blue_rain/archive/552.html 有的时候我们生成库文件,需要在里面加入一些UI,并提供出一些xml的资源,那如何在其他项目中使用呢? 我们 ...

  6. eBox(stm32) 之中断结构

    eBox的中断结构参考了mbed,和我们平时所用的中断结构有些差异,不容易理解,最近仔细看了底层代码,终于搞清楚了,总结一下         一  首先要要搞清楚的几个概念:类的静态成员,实例成员   ...

  7. c# 如何隐藏TabControl控件的标签

    http://www.cnblogs.com/chenleiustc/archive/2009/11/25/1527813.html 方法一:将标签缩小到机会看不到:设置页面的大小模式会自动适合(会尽 ...

  8. jquery checkbox 实现单选

    最近在用javascript的时候发现网上实现checkbox单选的代码都已经过时了. 用着几年前的代码发现根本不行了 原因是jquery api已经更改 http://api.jquery.com/ ...

  9. [转]java二维码生成与解析代码实现

    转载地址:点击打开链接 二维码,是一种采用黑白相间的平面几何图形通过相应的编码算法来记录文字.图片.网址等信息的条码图片.如下图 二维码的特点: 1.  高密度编码,信息容量大 可容纳多达1850个大 ...

  10. Swift_UI_UILabel

    Swift_UI_UILabel import UIKit class ViewController: UIViewController { override func viewDidLoad() { ...