Unity3D性能优化

https://blog.csdn.net/leonwei/article/details/18042603

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

  • 屏幕特效
  • 动态的pixel光照计算(如法线)
  • 实时的阴影

2.优化建议

- 渲染
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
10.远处的物体绘制在skybox上
11.使用drawcall batching:
对于相邻动态物体,如果使用相同的shader,将texture合并
对于静态物体,batching要求很高,详见Unity Manual>Advanced>Optimizing Graphics Performance>Draw Call Batching
12.批处理:
1)动态批处理:要求比较高,对面数、定点数、材质球都有要求
2)静态批处理:把不动的物体标记为static,相同材质球、相同预设体
13.减少模型数量,骨骼数,面片数
14.减少场景的大小,树,草
15.灯光烘焙光照探测
16.遮挡剔除Occlision
17.LOD、MipMap(会增大内存)
18.减少透明效果,反射效果
19.减少不必要的层级:打包图集最好不要超过1024*1024
20.使用序列帧动画代替粒子系统(增大内存)

规格上限:
1.每个模型只使用一个skinned mesh renderer
2. 每个mesh不要超过3个material
3.骨骼数量不要超过30
4.面数在1500以内将得到好的效率

- 物理
1.真实的物理(刚体)很消耗,不要轻易使用,尽量使用自己的代码模仿假的物理
2.对于投射物不要使用真实物理的碰撞和刚体,和自己的代码处理
3.不要使用mesh collider,使用简模代替
4.在edit->project setting->time中调大FixedTimestep(真实的物理的帧率)来减少cpu损耗

- 脚本编写
1.尽量不要动态的Instantiate和Destroy Object,使用Object Pool
2.尽量不要在Update函数中做复杂计算,如有需要,可以隔n帧计算一次
3.不要动态的产生字符串,如Debug.Log(“boo”+“hoo”),尽量预先创建好这些字符串资源,如字符串拼接使用System.Text.StringBuilder代替string的相加操作
4.Cache一些东西,在Update里面尽量避免Search,如GameObject.FindWithTag("")、GetComponent这样的调用,可以在Start中预先存起来使用全局变量
5.尽量减少函数调用栈,用x=(x>0?x:-x)代替x=Mathf.Abs(x)
6.不要在函数中new一个表,可以设置为全局变量多次使用,或使用pool.Get/pool.Add
7.使用for循环代替foreach,使用List代替ArrayList尽量少使用装箱拆箱的操作
8.可以break掉的循环直接退出,减少不必要的循环
9.少使用复杂运算,如除法、开平方根、反余弦,可以使用+、*代替
10.FixedUpdate等频繁调用的方法可以扩大间隔,可以使用协程、Invokerepeating
11.使用对象池减少对GC的使用
12.Dll,减少使用多余的类库,使用小的类库

https://blog.csdn.net/Blues1021/article/details/71104680?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase
13.例如:obj.transform.position=pos可以写成静态导出函数可以换成
class LuaUtil
{
static void SetPos(GameObject obj,float x,float y,float z)
{
obj.transform.position=new Vector3(x,y,z);
}
}

- shader编写
1.数据类型
fixed/lowp-for colors,lighting information and normals
half/mediump-for texture UV coordinates
float/highp-avoid in pixed shaders,find to user in vertex shader for position calculations
2.少使用的函数:pow,sin,cos等

- GUI
不要使用内置的OnGUI函数处理gui,使用其他方案,如NGUI

3.格式

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值