游戏优化的基本概念
目标
优化的目的通常是为了让游戏有更高的流畅度、更好的画面和更低的资源需求。但是这三者之间也有限制。更好的画面效果需要越来越复杂的计算,这在一定程度上影响了游戏的流畅性。为了同时保证画面效果和流畅度,游戏必然对硬件有更高的要求。因此音乐,需要在这三种需求之间找到一个平衡点。
在商业游戏项目中二维游戏引擎,还要考虑时间、人力、资金等成本问题,需要做出更多的取舍。例如,在不增加硬件要求的情况下,可以使用精密复杂的算法来保证画面效果和流畅度。这通常需要更多的研发时间和劳动力成本。在优化工作中,必须明确优化的目的和内容。还要选择正确的评价指标,根据评价指标衡量优化工作的进度。如果优化的目的是平滑,则应该以帧率作为评价指标。如果优化的目的是画面效果,应该以视觉体验作为评价指标。如果优化的目的是内存,那么应该以游戏运行时占用的内存空间大小作为评价指标。其他方面的优化也需要找到合适的评价指标,不宜凭直觉找到优化的方向。尤其是在复杂的游戏项目中,性能分析数据应该是优化的首要依据。
Unity 提供了强大的性能分析工具 Profiler。我们可以使用 Profiler 快速找到游戏的性能瓶颈,然后有针对性地进行优化。我们可以通过多种方式优化游戏二维游戏引擎,例如使用更复杂的数据结构和算法,以及使用更先进的技术来提高游戏程序的性能。计算机图形技术的发展和显卡硬件的升级是游戏产业进步的动力之一。在许多情况下,优化游戏意味着在各种需求之间找到平衡,但不应该过早地进行优化。计算机编程艺术的作者 Knuth 大师曾经说过“过早的优化是万恶之源”,让正确的程序比快速的程序更快更容易。通常,我们应该关注游戏程序的正确性和脚本代码的清晰易读性。二是考虑优化。
Unity游戏性能分析工具
Unity Profiler 简介
Profiler 可以直观地显示游戏运行时各种资源的使用情况,包括 CPU、GPU、渲染、内存、音频和物理。
打开 Profiler 视图
从菜单栏中选择 Window -> Profiler 以打开 Profiler 视图
如何使用探查器
开启 Profiler 录制功能,点击播放按钮进行游戏预览。 Profiler 会在游戏运行时自动记录性能数据,并将其显示在 Profiler 时间轴上。
分析器时间线
时间线左侧的标题指示每个分析器时间线中记录的内容。内容包括 CPU 使用率、GPU 使用率、Renderer 渲染、内存内存、Audio 音频、Physics 物理、Physics2D 2D 物理等。
概览窗口
分析工具栏
打开Deep Profiler后,所有函数调用都会被记录下来,可以准确统计游戏代码所花费的所有时间,但是内存占用高,会影响游戏的运行效率。
针对 Deep Profiler 的局限性,我们可以插入 Profiler.BeginSample(name:string);和 Profiler.EndSample();在代码中手动开启和关闭代码分析。
//玩家跳跃函数
void Jump(bool isGround){
Profiler.BeginSample ("MyProfiler - FPSPlayerMove");
if (CrossPlatformInputManager.GetButtonDown ("Jump") && isGround) {
Thread.Sleep (100);
rigid.AddForce (Vector3.up * jumpVelocity, ForceMode.VelocityChange);
if (anim != null)
anim.SetBool ("isJump", true);
} else {
if(anim != null)
anim.SetBool ("isJump", false);
}
}
保存代码并再次运行深度分析。在 Profiler 视图的 Overview 窗口中可以看到相应的统计结果,消耗时间约为 100 毫秒。
Profiler 的远程分析功能
Profiler 提供远程分析功能,允许开发人员分析独立于 Unity 编辑器运行的游戏程序。
Profiler 远程分析步骤
构建可配置的Unity游戏程序或安装包使用Profiler在设备上运行可配置的Unity游戏程序,通过IP地址,与设备上独立运行的游戏程序建立连接,开始分析游戏
补充阅读
Unity性能分析工具Profiler(/Manual/Profiler.html)