Unity3D性能优化(一)

来源:互联网 发布:自己的五年规划 知乎 编辑:程序博客网 时间:2024/06/06 15:44

一、数学计算:
利用弧度判断范围:
向量点乘求夹角,求出弧度
float dot =Vector3.Dot(a.normalized, b.normalized);
float angle = Mathf.Acos(dot) * Mathf.Rad2Deg

二、降低DrawCalls:
①Occlusion Culling(OC):
a.定义:当物体被送进渲染流水线之前,将摄像机视角内看不到的物体进行剔除。从而减少,从而减少每帧渲染数据量,提高渲染性能
b.适用:场景中物体较密集
c.使用(Instance OC): 创建层→为游戏物体指定层(将参与遮挡剔除)与标签(将自动附加IOClod)→物体添加碰撞器Collider组件→摄像机附加脚本ICOcam
d.缺:需要判断物体是否渲染,增加CPU的开销
②精灵打包:
a.定义:做界面时使用小图,而在项目发布时引擎会根据精灵Packing Tag 自动将小图合并在一张大图集中,从而减少Draw Calls,减少GPU渲染物体次数。
b.设置打包方式:
Edit –> Project Settings –> Editor –> Sprite Packer
– Disabled 表示不启用
– Enabled For Builds 表示打包时启用
– Always Enabled 表示永远启用
③图集:
a.定义:美工制作图片时,尽量将需要在同个界面显示的小图做到一张大图中。
b.在Unity中切割精灵:
– 选中图集,在 Inspector 面板中将Sprite Mode 设置为Multiple。
– 编辑精灵 Sprite Editor。
精灵打包和图集降低Draw Calls的原理:
a.在界面中默认一张图片一个Draw Calls。
b.同一张图片多次显示仍然为一个Draw Calls。
三 降低顶点数与面数
①Level Of Detail(LOD):
a.定义:根据物体模型的节点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。
b.适用:场景中存在有高面数模型且存在距离变化
c.优:降低定点数和面数
缺:需要判断距离,增加CUP开销;资源增多,内存增加

四:缓存-减少反复创建对象的时间
1.对象池
工作原理:池技术【缓存技术】提高应用程序性能的一种技术
工作过程:1 有池=集合数据类型的对象 代表内存
程序运行加载到内存
2 需要一个小兵 小兵类 》 new 》 小兵对象

优点:当需要对象的时创建,不需要时,不是把对象销毁,而是把对象返回到对象池中【任然停留在内存中】,
当再次需要的时候,直接从池中取,节省了再次创建随想所需要的时间和资源,从而提高了性能
用途:适合用于项目中,需要某种乐行的对象很多,而且频繁的出现和隐藏。
五.寻路优化:
目标没有发生变化,不要反复计算路径

public void Update(){   if(goPosition == targetPosition)return;   goPosition = targetPosition;   NavMeshAgent.setDestination(targetPostion);  }
0 0
原创粉丝点击