转 unity 优化
最近研究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 优化的更多相关文章
- [Unity优化] Unity CPU性能优化
前段时间本人转战unity手游,由于作者(Chwen)之前参与端游开发,有些端游的经验可以直接移植到手游,比如项目框架架构.代码设计.部分性能分析,而对于移动终端而言,CPU.内存.显卡甚至电池等硬件 ...
- 【Unity优化】构建一个拒绝GC的List
版权声明:本文为博主原创文章,欢迎转载.请保留博主链接:http://blog.csdn.net/andrewfan 上篇文章<[Unity优化]Unity中究竟能不能使用foreach?> ...
- 再议Unity优化
0x00 前言 在很长一段时间里,Unity项目的开发者的优化指南上基本都会有一条关于使用GetCompnent方法获取组件的条目(例如14年我的这篇博客<深入浅出聊Unity3D项目优化:从D ...
- UNITY 优化之带Animator的Go.SetActive耗时问题,在手机上,这个问题似乎并不存在,因为优化了后手机上运行帧率并未明显提升
UNITY 优化之带Animator的Go.SetActive耗时问题,在手机上,这个问题似乎并不存在,因为优化了后手机上运行帧率并未明显提升 经确认,这个问题在手机上依然存在,不过占的比例非常小.因 ...
- 面向英特尔® x86 平台的 Unity* 优化指南: 第 1 部分
原文地址 目录 工具 Unity 分析器 GPA 系统分析器 GPA 帧分析器 如要充分发挥 x86 平台的作用,您可以在项目中进行多种性能优化,以最大限度地提升性能. 在本指南中,我们将展示 Uni ...
- (转载)Unity 优化总结
Unity 优化总结 2017-03-10 | 发布 大海明月 zengfeng75@qq.com | 分类 Unity | 标签 Unity 优化 相关文档 UGUI 降低填充率技巧两则 U ...
- Unity优化之减少Drawcall
简单来说,Drawcall就是屏幕渲染一次所需要的开销,为了较少消耗,提高性能,一般有以下几种方法. 一: 批处理 1.动态批处理 如果动态物体共用着相同的材质,那么Unity会自动对这些物体进行批处 ...
- Unity 优化
1. 尽量避免每帧处理比如: function Update() { DoSomeThing(); } 可改为每5帧处理一次: function Update() { == ) { DoSomeThi ...
- 【Unity优化】Unity优化技巧进阶开篇
版权声明:本文为博主原创文章,欢迎转载.请保留博主链接:http://blog.csdn.net/andrewfan 做游戏好多年了,关于游戏优化一直是令开发者头疼的一个问题.因为优化牵扯的内容很多, ...
随机推荐
- SQL 一条SQL语句 统计 各班总人数,男女各总人数 ,各自 男女 比例 (转)
select sClass 班级,count(*) 班级学生总人数, sum(case when sGender=0 then 1 else 0 end) 女生人数, sum(case when ...
- C#通过SSH连接MySql
出于安全考虑,有的时候数据库服务器只能通过SSH访问,比如MySql服务装在了服务器A上,并且A机器只允许B机器才能访问,而部署环境可能在C机器上,这时候就要C服务器通过B服务器连接A服务器,这时候就 ...
- TCP心跳 | TCP keepAlive(转)
应用层对于每个socket采用如下函数来开启 keepalive机制,其参数将采用系统上述配置. setsockopt(rs, SOL_SOCKET, SO_KEEPALIVE, (void *)&a ...
- Testlink部署全攻略
部署前准备: xampp,我下载的链接:https://www.apachefriends.org/download.html Testlink,下载地址:https://sourceforge.ne ...
- deep learning...深入学习深度学习 --工具篇
Caffe( http://caffe.berkeleyvision.org/ )是一个清晰而高效的深度学习框架,其作者是博士毕业于UC Berkeley的贾扬清( http://daggerfs.c ...
- Javascript模块化编程(二):AMD规范(转)
这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块. (接上文) 七.模块的规范 先想一想,为什么模块很重要? 因为有了模块,我们就可以更方便地使用别人的代码,想要 ...
- Gulp自动添加版本号(转载)
本文转载自: gulp自动添加版本号
- 9款一键快速搭建PHP运行环境的好工具
9款一键快速搭建PHP运行环境的好工具 胡倡萌 2011/02/19 网络资源 77,063 1 内容提要: 建立一个PHP网站,首先需要搭建PHP的开发和运行环境,对于PHP初学者也是一个难 ...
- [Android] ListView关于adapter多种view设置
使用的关键点是在adapter覆盖两个方法 public int getItemViewType(int position) public int getViewTypeCount() 其它的可另go ...
- 关于oracle数据库中进行查询的时候出现效率特别差的一种情况
下面这段代码执行效率是极慢的(根本没执行完成过): select /*+ parallel(16) */ z.small_code,trunc(hs.CREATED_AT),sum(hs.COST_S ...