综述:游戏优化

来源:互联网 发布:mac os sierra文件 编辑:程序博客网 时间:2024/06/01 20:46

方向:引擎,资源,代码,UI,外带库,着色器,游戏中的优化

游戏未开始前:
1.引擎:相机,光源,特效(粒子系统),时间步, 刚体,碰撞器,GPU,CPU,Draw Call,内存

相机:合理设计远近裁剪面;根据物体的体积大小,渲染成本进行分层;不需渲染的物体放在摄像机看不到的位置;

光源:避免采用实时光照(可以光照贴图替代,用shader模拟光照或光照烘焙),important光源尽量减少能不用就不用,SpotLight,PointLight少用;性能占用顺序:SpotLIght>PointLight>Direction;

特效(粒子系统):关闭粒子碰撞;控制粒子总数;每次粒子发射粒子数量;alpha test,alpha blend(粒子大小控制,粒子纹理去掉alpha通道);单独一个场景测试粒子特效,观察其性能状况,适时进行优化;

时间步:合理设置FixedTimeStep(15-25);合理设置Maximum Allowed TimeStep(0.3)(省电,减少手机发热,能稳定游戏PFS,和减少卡顿现象)

刚体:使用运动学刚体;合理设计层级碰撞矩阵;刚体适时进入休眠状态;尽量避免与多个刚体同时发生碰撞;

碰撞器:使用BoxCollider和SphereCollider;尽量避免使用MeshCollider(无可避免时,可适当减少网格面数);

GPU:主要是顶点和像素方面的瓶颈
Static Bathing和Dynamic Bathing,变换相同,材质共用(例如当材质相同,贴图不同时,将贴图合成图集),切换材质性能开销大;像素方面,减少OverDraw,遮罩,LOD插件技术,Mipmap,渲染顺序控制不合理容易产生overdraw

CPU:游戏上主要是draw calls和代码质量,对象池

内存:图片和网格压缩;音频格式正确使用;合理控制图集大小,减少图集空白;依赖打包;适时清理内存,引用适时置空,防止未使用的资源滞留内存;

2,资源:贴图,网格,动画,地形,声音

3,代码:组建缓存;内存预分配;使用对象池

4,UI:资源,贴图,内存,GameObject,UI
贴图格式:ETC,PVRTC格式;将每张原始贴图的透明通道分离出来,透明通道写进另一张图片的  R通道里边,渲染时候,将两张贴图都送进显存,同时修改NGUI的shader;在陷渲染的时候,将第二张贴图的红色通道写进第一张贴图的透明通道里边,恢复原来的颜色;

整理图集:
UI图片设计为尅做九宫格拉伸,及UISprite的类型为Sliced;图案设计成对称的形式
确保不要让不必要的贴图素材驻留内存,也不要再渲染时候将无关的贴图送进显存;
如果两个界面之间存在大量相同的素材,可以考虑共用一张图集;

内存释放:
确保图集大小不要过大(过大会导致内存崩溃),减少图集中的空白大小
程序中有对UI见面资源的引用,要再清理内存之前置空;否则调用Resource.UnloadUnusedAssets()并不会释放
切换场景要第一时间调用Resource.UnloadUnusedAssets()来释放未使用的资源

控件分组放置:会变化的控件可以分为一直(如血条,伤害数字)(避免图集夹层)

尽量少用图集和UIPanel,尽量避免夹层(即不同材质的UISprite相互间夹杂,altas夹层,材质夹层)

背景,按钮放置于底层,文字Label放置于顶层

UI控件内部逻辑,使其必要时才更新

5,Shader
6,外带库
7,着色器
8,游戏中的优化:对象池的使用(减少New的使用);字符串操作;GC;




0 0
原创粉丝点击