Unity3D性能优化

最近在学习Unity3D时,提到了性能优化,刚学习Unity时,只知道对象池可避免重复的删除和重建,今天又重新总结了一下,才知道,原来性能优化还有这么多方式

不过最主要从三个方面进行:

一、从CPU方面考虑

二、从GPU方面考虑

三、从内存方面考虑

下面分别从三方面进行总括:

1、先大概从CPU方面概括:

(1)主要是指计算有关的部分

(2)代码部分

  ①删除一些空的方法,如Update

  ②使用for循环代替foreach,使用List代替ArrayList尽量少使用封箱拆箱操作

  ③可以Break掉的循环,直接退出,减少不必要的循环

  ④少使用复杂运算,如除法、开平方根、反余弦、可以使用+*代替

  ⑤FixedUpdate等频繁调用的方法可以扩大间隔、可以使用协程、Invokerepeating

  ⑥OnGUI,最好只在一个脚本中出现

  ⑦OnBecameVisible当物体被相机看到时才执行一些操作,常用于AI

  ⑧不使用打印,不出现警告

  ⑨不能频繁的获取组件,创建新的对象,使用全局变量代替

(3)物理系统

  ①碰撞检测方面,使用离散的

  ②碰撞器不使用MeshCollider,使用简模代替

(4)粒子系统

  ①减少粒子数量、缩小效果

(5)动画方面

  ①使用简单的动画

(6)Shader方面

  ①尽量使用一些简单的算法,不使用复杂的效果

  ②尽量不使用透明的处理

  ③减少屏幕特效的复杂运算

(7)灯光

  ①不使用实时阴影,使用Mixed

2、从GPU方面:

(1)、主要是渲染方面

(2)、批处理

  ①动态批处理:要求比较高,对面数、定点数、材质球都有要求

  ②静态批处理:

    1)把不动的物体标记为Static

    2)相同材质球、相同预设物

(3)、减少模型数量、骨骼数、片面数,使用法线贴图代替细节模型

(4)、减少场景的大小、树、草

(5)、灯光烘焙

    ①光照探测

 (6)、遮挡剔除Occlision

 (7)、LODMipMap(会增大内存)

 (8)、减少镜头特效

 (9)、减少透明效果、反射效果

 (10)、减少不必要的层级:打包图集,一个图集最好不要超过1024*1024

 (11)、使用序列帧动画代替粒子系统(增大内存)

3、从内存方面

(1)空间、存取速度方面

(2)使用对象池,减少对GC使用

(3)使用stringBuilder代替string

(4)减少图片尺寸,压缩图片

(5)简模

(6)Dll,减少使用多余的类库,使用小的类库

(7)删除不必要的资源,如一些事例

(8)使用动态加载

(9)使用全局变量

(10)使用内存空间小的类型

以上只是学习中总结的一个概论,详细内容可在网上了解

posted @ 2019-06-03 19:20  一块儿腹肌的泰迪  阅读(474)  评论(0编辑  收藏  举报