Unity3D性能优化方案

来源:互联网 发布:mac装win10wifi用不了 编辑:程序博客网 时间:2024/06/05 16:27

一:什么是性能优化?
常见的优化类型包括:性能优化(重点),流程优化,体验优化。
性能优化的目标:(1)游戏流畅运行,(多种帧数标准,避免卡顿)
常见的帧数标准:60帧(终极目标),30帧(移动端要求),24帧。
(2)游戏符合市场需要。(硬件的兼容性 ,安装包的大小。)

二:优化常见的误区:
误区一:我的游戏很简单,不需要优化。
正解简单:玩法简单,架构简单。与优化无关哦!
误区二:优化工作尽早进行。
正解:由于项目是团队开发的,优化过早的话造成代码改动的地方会有很多地方呢!过早优化还会浪费时间和精力,而且意义不大。
误区三:性能优化=Degbug
正解:它们直接毫无关系。
三:游戏优化的两大原则:
(1)不过早做优化。
(2)用户不察觉原则。
a.玩家不一定能发现欠优化的地方。
b.玩家不一定能发现优化后欠佳的地方。

四:优化的组成部分:
脚本,
图形与物理,
文件。

脚本:1.常见的性能黑点(不够好的地方)。
2.如何找到需要优化的代码。
图形与物理:
1.美术资源
2.物理效果
文件:
1.安装包的优化
2.资源包的优化
3.工作流程的优化
所有游戏都要优化吗?
三个事实:
**1.性能完美是我们追求的目标。
2.不同类型的游戏对优化的侧重点不一样。
3.优化工作占生命周期非常大的一部分**
五: Profile(分析器)与时间
这里写图片描述
Profiler:用来评估性能的工具。
这里写图片描述

运行之后的工作状态哦!
这里写图片描述
CPU资源使用情况。
这里写图片描述
显卡资源的使用情况。
这里写图片描述
内存资源。
这里写图片描述
音频资源。
这里写图片描述
视频资源。
这里写图片描述
物理碰撞资源。
这里写图片描述
网络通信情况。
六:使用profiler

七:常规循环与变量调用

这里写图片描述

void FixedUpdate()    {    }    void Update()    {    }    void LateUpdate()    {}

变量的隐性调用。

这三个是常规的循环:优化工作中看看是否常规循环中是否有不不要的东西。
八:场景搜索与协程
GameObject.Find()方法的使用。
当频繁的使用一个物体是,可以将其存储起来,方便多次使用哦!
九:合理降低数学精度
1.计算距离 Vector3.magnitude 长度 返回向量的长度(只读)使用但是使用sqrMagnitude(计算平方很快)来更优化呢!
这里写图片描述
举例说明:

这里写图片描述
点积>0表示向量同向。

float distance1 = (player1.position - transform.position).magnitude;        float distance2 = (player2.position - transform.position).magnitude;        print(distance1);        print(distance2);        print(distance1 < distance2);        float distance11 = (player1.position - transform.position).sqrMagnitude;        float distance22 = (player2.position - transform.position).sqrMagnitude;        print(distance11);        print(distance22);        print(distance11 < distance22);
    float angle = Vector3.Angle(player2.forward, player1.forward);    float dot = Vector3.Dot(player2.forward, player1.forward);    print(dot);    print(angle);

十:对象池 优化技术(以后会更新的,下次讲啦!)

原创粉丝点击