Unity性能优化教程

本文提供了一个详细的Unity游戏性能优化指南,包括主要优化周期、性能问题分析和解决方案。针对帧速率下降(Spikes)、每帧成本、加载时间和内存使用进行了深入探讨,提出了如何通过UnityProfiler分析问题、减少垃圾收集器Spikes、优化每帧计算及内存管理等策略,旨在帮助开发者实现游戏在各种设备上的流畅运行。
摘要由CSDN通过智能技术生成


你是否打算优化你用Unity制作的游戏并获得最佳的性能表现?在这个完整的Unity优化指南中,我将向你展示如何正确地提高Unity的性能,从而使游戏运行顺滑且稳定。

在这里,我将考虑使用由Unity游戏引擎, 以及Unity独立开发者提供的优化工具。

我还将深入探讨一些视频游戏中常见的性能问题的细节,并从代码和资产的优化、技巧和窍门这几个方向为其找到解决方案。

一、主要优化周期

Unity优化是指使游戏运行得更好的过程。通常情况下,优化的主要原因是使游戏更流畅,或者使游戏更容易被更多的观众使用,从而使游戏在低端设备上运行得更好。

在这里插入图片描述
接下来将介绍常见的优化周期,在下一个开发阶段后,当游戏中突然出现明显的掉帧时,您需要按顺序进行如下的步骤:

  1. 如果你的游戏在目标平台上没有延迟掉帧和卡顿,那么游戏就不需要优化。(不要为了优化而优化)
  2. 如果游戏存在掉帧和卡顿,那么首先是使用Unity Profiler分析,来检测项目中存在哪些性能问题。
  3. 在确定优化任务后,开始优化之前,建议花费一些时间考虑各优化区域的优先级。该优先级是通过比较实现优化区域所需的时间和最终能获得的性能增益来确定的。最终产生的带有优先级的任务列表,将作为整个优化过程的指南。这也有助于以最少的努力获得最大的性能提升。遵循此列表,直到目标平台上的游戏具有流畅的游戏性和稳定的帧率。
  4. 如果游戏执行得很好,没有明显的问题,即便优化任务列表里还有任务没完成,也可以停止进一步的优化。
  5. 如果游戏仍然存在问题,那么应该分析游戏项目并存储数据。下一个存储的数据可以与前一个数据进行比较,以便更仔细地检查整个优化过程的状态。通过重复分析,您可以了解项目在完成单个优化任务后发生了什么,该过程是否带来了性能的改进。

二、性能问题的各种类型

你们可以根据问题的性质用不同的方式优化Unity游戏。性能问题可以根据其性质分为几种类型。

1. Spikes

Spike(n.尖状物)是指游戏帧速率的突然下降。当游戏突然停止并且在一段明显的时间内没有运行时,就会注意到这一点。这可能会打破玩家的沉浸感,或导致他在操作时犯下一个本来不会犯的错误。Spikes可以被视为Profiler Graph的高点。

在这里插入图片描述
Spikes主要由复杂的计算或在单个帧期间执行的困难操作引起。其主要是高强度游戏(驾驶或射击游戏)中的一个问题,这类游戏需要稳定的帧率和对游戏的高度控制才能让人感觉良好。

在这里插入图片描述

(1)垃圾收集器的Spikes

垃圾收集峰值是指由Unity的GC导致的帧率下降,在玩游戏时很容易被注意到。这些Spikes通常很高,当内存中的垃圾到达内存的阈值,收集器开始工作,从而清理内存中不必要的对象时,它们就会出现。它们的频率取决于游戏每帧产生的垃圾量。

通过在运行时生成更少的垃圾,可以降低GC出现的频率。完全防止的唯一方法是在运行时不生成垃圾。这是一项巨大的任务,必须从项目一开始就加以考虑。

2. 每一帧的成本

每帧成本是指每一帧运行的计算和操作所需要的成本。例如,物理计算、运行AI行为或处理角色动画。

每帧成本都会降低游戏的总体帧速率,让游戏变得不那么流畅。如果一个游戏大体上运行不好,这就是需要改进的地方。

3. 加载时间

加载时间是指游戏加载所需的时间。这包括游戏打开时的第一次加载,以及在运行时发生的加载,例如在场景之间切换。虽然通常不是主要问题,但加载时间过长或加载屏幕出现得太频繁会对用户体验产生负面影响。
为了减少加载的时长,考虑拆分加载时的工作。也就是预先加载资源,以减少加载屏幕期间需要加载的对象数量,或降低加载场景的复杂性。

(1)开放世界

在一个开放世界的游戏中,需要在运行时加载许多对象,可以实现一种回收或流式资产的方法。在“内部”游戏中,每个框架的一小部分用于加载和卸载资产。这使得整个四个小时的体验只需一个初始加载屏幕即可完成。

4. 内存使用

RAM(随机存取存储器)是在运行时加载游戏的存储器。RAM在运行时存储游戏所需的一切。VRAM(视频随机存取存储器)位于显卡上,用于图形效果。VRAM是用于存储图形卡绘制的纹理和模型的存储器。RAM是CPU使用的,而VRAM是GPU使用的。未优化或太多资产都可能使其成为项目的瓶颈。当内存不足时,可能会出现卡顿。
为了减少项目所需的内存量,请考虑如下步骤:

  • 降低对象的复杂性(盲猜是模型面数之类的)和纹理的分辨率
  • 减少项目中的独特资产(盲猜是减少资产的样式,比如宝可梦中心柜台里的姐姐)
  • 使用对象池

三、性能分析

  • 本文章转载自https://makaka.org/unity-tutorials/optimization
  • 自己学习使用,第一次翻译,如有差错请见谅。
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值