想要Unity项目丝滑流畅,千万别这么做了

在游戏开发领域,性能至关重要 👑。无论游戏的概念或故事情节多么引人入胜,如果游戏出现卡顿、延迟或掉帧,都可能很快让玩家失去兴趣。这就是 Unity 分析器 作为游戏开发者最好的朋友 💪 的用武之地。作为 Unity 编辑器中集成的强大性能分析工具,它使开发者能够揭开游戏性能背后的奥秘 👀,识别瓶颈 🚧,最终提供无缝且愉快的游戏体验 🤩。

在我们深入研究分析工具之前,我们将讨论 Unity 中性能的含义、瓶颈可能发生的位置以及 Unity 优化循环的工作原理。⚙️

图片

欢迎 😊

Unity 中的主要优化循环

优化 Unity 就是要提高游戏的性能。通常,优化就是为了提高游戏性能,并确保游戏可以在更多设备上流畅运行,尤其是那些配置较低的设备。

图片

Unity 优化循环

💡 为了优化而优化是不可取的。

也就是说,无论目标项目或设备是什么,都必须遵循一种优化方法。如果你不遵循这个步骤,你就是在盲目地乱投医。遵循优化技巧可以节省时间并提高效率。

什么是性能?

以下操作每秒发生 60-90 次!实际上,这取决于你设备的性能,所以范围可能会变化。

图片

Unity 生命周期

Unity 生命周期图

图片

***Unity 生命周期***

当我们谈论性能时,我们指的是这个过程以及完成这个过程需要多长时间。

如何在 Unity 中检查性能?

但我们如何评估其性能呢?我们必须理解两个方面。我们既有 CPU,也有 GPU。CPU 无疑在大多数项目中都承担了大部分工作。CPU 完成了所有准备工作。

- **CPU**
    - 准备
        - 对相似对象进行分组(批处理)
        - 物理
        - 游戏逻辑
        - 输入
- **GPU**
    - 处理
        - 渲染
        - 着色器
        - 照明

准备工作包括将所有相关项目收集在一起并将其发送出去,以便在屏幕上显示。

GPU 就像 CPU 的帮凶。它负责处理所有花哨的图形。它负责处理所有令人愉快的任务,例如处理、渲染、着色器和照明。这两个伙伴共同努力,展示你的场景,并将每一帧都栩栩如生。

目标帧率

目标帧率是 Unity 尝试以每秒多少帧(fps)渲染游戏的帧数。更高的帧率意味着更流畅的游戏体验,但它也需要更多的处理能力。图片中的文字显示了两个常见的目标帧率:60 fps 和 30 fps。

图片

目标帧率

帧时间通过将 1000 毫秒(一秒)除以目标帧率来计算。例如,在 60 fps 时,帧时间为 16.66 毫秒 (ms)。这意味着 Unity 有 16.66 ms 的时间来渲染每一帧,以保持 60 fps 的帧率。

图片

FPS 与帧时间

考虑这些数字:

  • 1000 ms/sec / 900 fps = 每帧 1.111 ms

  • 1000 ms/sec / 450 fps = 每帧 2.222 ms

  • 1000 ms/sec / 60 fps = 每帧 16.666 ms

  • 1000 ms/sec / 56.25 fps = 每帧 17.777 ms

如果你的应用程序以惊人的 900 fps 🏎️ 速度运行,你将获得 每帧 1.111 毫秒 ⚡ 的闪电般的帧时间。哇,以惊人的 450 fps 🔥 速度,你将获得 每帧 2.222 毫秒 ⚡ 的闪电般的帧时间。系好安全带;一切都在超速运行!🚀

你看,真是个魔术 🎩!帧率似乎下降了一半,但实际上,它只是 每帧 1.111 毫秒 🤏 的微小差异。真是个狡猾的光学错觉!👀

所以,事情是这样的:当你比较 60 fps ⏱️ 和 56.25 fps ⏱️ 时,你看到的差异是惊人的 每帧 16.666 毫秒 ⏳ 和 每帧 17.777 毫秒 ⏳。真是吹毛求疵,对吧?😉 你看,每帧多了 1.111 毫秒 🤏 的时间。但是,嘿,当你以百分比的形式查看时,帧率的下降并不像看起来那么明显。

调整移动设备上的帧预算

让 大约 35% 的帧空闲 就相当于在马拉松式的游戏过程中让你的移动设备喘口气。这有助于防止过热,并防止你的电池过快耗尽。

目标帧时间为 33.33 ms(这是为了实现流畅的 30 fps 游戏体验),你的典型移动游戏应该具有大约 22 ms 的帧预算。

以下是计算方法:(1000 ms / 30) * 0.65 = 21.66 ms

多帧的结构

图片

渲染帧操作

这幅图的关键是理解你的 CPU 和 GPU 如何高效地协同工作,在指定的帧时间内渲染一帧。如果任何部分占用时间过长,都会导致帧率下降,从而对游戏的性能产生负面影响。

帧的结构 - CPU 受限

图片

CPU 受限

在这幅图中,我们看到 CPU 部分(引擎代码、你的代码、渲染)占用了大部分帧时间(21 毫秒 ⏳),而 GPU 部分 相对较短。这表明这是一个 CPU 受限场景 🚧。当 CPU 超负荷,完成任务所需的时间比预期长时,就会造成瓶颈,迫使 GPU 等待 💤 CPU 完成任务,才能开始渲染帧。这种等待时间会增加总的帧时间,导致帧率降低,游戏体验不流畅。🐌

帧的结构 - GPU 受限

图片

GPU 受限

在这幅图中,我们看到 CPU 部分(引擎代码、你的代码、等待)占用的帧时间相对较少(19 毫秒),而两个 GPU 部分占用了大部分帧时间。这表明 GPU 是瓶颈。CPU 已经很快完成了帧的处理任务,现在正在等待 GPU 完成渲染。这种等待时间会增加总的帧时间,导致帧率降低,游戏体验不流畅。

性能问题类型(瓶颈)

嗯,说到优化 Unity 游戏,你掌握了一些技巧,具体取决于问题的性质。天啊,性能问题…它们形态各异!

图片

游戏延迟!!!

图片

瓶颈

开发者在使用 Unity 时可能会遇到性能挑战。如果这些瓶颈得不到解决,会对游戏体验产生重大影响。承认并理解这些挑战对于确保游戏流畅运行至关重要。以下可能很重要:

  • 脚本问题。低效循环、冗余计算和不恰当使用协程会导致游戏逻辑变慢。(就像峰值一样

  • 图形超负荷。过度使用高多边形模型和未优化的着色器会导致超负荷,从而给渲染过程带来压力。

  • 物理复杂性。过度依赖实时模拟、过多的碰撞体和复杂的计算会阻碍游戏物理。(物理时间

  • 内存压力。内存泄漏、大型未优化的资源和频繁的垃圾回收会导致意外延迟,从而惹恼玩家。(内存使用情况

  • 资源加载延迟。同步加载和即时加载大型资源会破坏游戏连续性,降低其可玩性。(加载时间

为了克服这些挑战,通常需要结合使用分析、细化以及偶尔重新考虑游戏设计的某些特定元素。例如,一个视觉效果出色的场景,如果不进行适当优化,可能会成为性能挑战。同样,一个复杂的 AI 系统,如果脚本编写不高效,可能会影响游戏速度。

分析和分析工具在优化中的作用

图片

 

如你所见,一款成功的游戏需要彻底的优化。开发者可以对潜在的性能问题做出有根据的猜测,但专门的分析和分析工具可以提供最精确的见解。这些工具在识别、分析和修复性能瓶颈方面发挥着至关重要的作用,以确保游戏在不同平台上流畅运行。

Unity 分析工具简介

Unity 为开发者提供了方便的内置分析工具,以便轻松监控和分析游戏的各个方面。它们使开发者能够彻底探索游戏性能指标,确保游戏的各个方面都经过精细调整,以提供卓越的玩家体验。

图片

分析工具

为什么要使用分析工具来识别性能瓶颈?

分析工具的重要性不可忽视。以下是原因:

  • 精确性。分析工具提供准确的数据,确保开发者专注于真正的性能问题,而不是感知到的问题。

  • 全面分析。这些工具提供游戏的整体性能视图,涵盖从脚本执行到资源加载时间的所有内容。

  • 时间效率。分析工具可以快速突出显示问题区域,无需手动筛选代码或资源,从而节省宝贵的开发时间。

  • 优化的资源分配。开发者可以通过了解游戏最耗费资源的地方,更有效地分配资源。

Unity 项目中的性能分析:案例研究

案例研究 1:过度绘制困境

  • 我们的开发者观察到,某个特定的游戏场景会导致延迟。通过利用 Unity 的分析器,他们找到了由多个透明对象重叠而产生的过度绘制问题,导致 GPU 冗余地渲染像素。我们能够通过优化场景设计和减少重叠对象的數量来解决性能问题。

案例研究 2:脚本效率低下

  • 在另一次情况下,一个具有复杂 AI 行为的游戏遇到了意想不到的减速。根据 Unity 分析器,某些 AI 脚本在每一帧中都执行了不必要的计算。当开发者优化脚本并缓存常用计算后,游戏的性能得到了显著提升。

案例研究 3:内存管理问题

  • 一款手机游戏在内存有限的设备上出现了崩溃。Unity 中的内存分析器指出,一些高分辨率纹理使用了大量内存。开发者通过压缩纹理和实施动态加载系统,提高了游戏在所有设备上的稳定性。

案例研究 4:Unity 2D 性能优化

  • 在一个 Unity 2D 游戏中,玩家在激烈的动作序列中遇到了掉帧。Unity 的分析器发现,当多个动画同时播放时,CPU 使用率很高。由于 Unity 的 2D 动画绑定,开发者能够减少计算负荷,从而在激烈的动作序列中提高游戏性能。

Unity 分析器

Unity 分析器 是分析 Unity 项目的主要工具。它提供了有关项目不同性能区域的大量信息。

  • CPU 和 GPU 使用情况

  • 渲染信息

  • 内存使用情况

  • 音频和视频

  • 物理(2D 和 3D)

  • 网络消息和操作

  • UI

  • 全局照明

该工具是 Unity 中每个优化过程的起点。它提供的信息可以帮助发现瓶颈,而这些瓶颈是第一个优化任务的基础。学习使用它有助于理解 Unity 引擎和当前项目的工作原理。

为了添加有关如何将 Unity 分析器添加到现有“Unity 性能管理和改进”文档的内容,我将提供这两部分的概述和详细内容。

图片

Unity 分析器模块

将 Unity 分析器添加到你的项目中

1. 打开分析器窗口

  • 要开始分析你的 Unity 项目,你首先需要打开分析器窗口。这可以通过在 Unity 中导航到顶部菜单栏,然后选择 *窗口 > 分析 > 分析器* 来完成。此操作将打开分析器窗口,它是进行性能分析的中心枢纽。

图片

打开分析器

2. 对接分析器窗口

  • 为方便起见,你可以将分析器窗口与其他常用的窗口(例如控制台或检查器)对接在一起。这提供了一个集成的工作区,使你可以在处理项目时轻松访问分析数据。

图片

对接分析器

3. 将分析器连接到你的游戏

  • 分析器可以分析在 Unity 编辑器或连接设备上运行的项目。在分析当前正在连接设备上运行的游戏之前,请确保 Unity 可以连接到该设备并识别该设备。然后,使用分析器窗口顶部的下拉菜单选择你的设备。对于基于编辑器的分析,只需在 Unity 编辑器中打开分析器窗口,然后播放游戏即可。

图片

连接设备

使用 Unity 分析器分析性能

1. 分析会话

通过在 Unity 编辑器中打开分析器窗口,然后按下播放按钮,启动一个分析会话。分析器会立即开始收集数据,使你能够实时监控性能。你可以在任何时候暂停和恢复数据收集,以便专注于特定区域或事件。

图片

分析器

2. 分析 CPU 使用情况

CPU 分析器模块提供有关游戏在每一帧中花费时间的详细信息。寻找峰值或持续使用率高的区域,这些区域可能表明存在性能问题。通过展开详细视图,你可以看到各个函数及其执行时间,这有助于你识别成本高的操作。

图片

分析器 CPU

3. 检查 GPU 性能

切换到 GPU 分析器模块以分析渲染性能。本节突出显示渲染每一帧所花费的时间、绘制调用的数量以及其他与 GPU 相关的指标。识别高成本着色器或过多的绘制调用可以指导优化,例如材质批处理或着色器优化。

图片

分析器 GPU

4. 内存分析

内存分析器模块提供有关游戏如何分配内存的见解。这可以帮助你发现内存泄漏、过度分配临时对象以及可能导致垃圾回收峰值或内存不足崩溃的其他问题。

图片

分析器内存

5. 基于分析器数据进行优化

在识别出性能瓶颈后,你可以开始优化游戏。这可能包括代码优化、资源调整或游戏机制的更改。在每次优化后,都要迭代地分析游戏,以衡量改进情况,并确保没有引入新的问题。

6. 利用其他分析器模块

除了 CPU、GPU 和内存之外,Unity 分析器还提供了用于分析音频、物理、网络和 UI 性能的模块。根据游戏的需求,这些模块可以提供有关游戏特定区域的宝贵见解,从而帮助你优化项目的各个方面。

图片

分析器其他模块

结论:通往流畅游戏的道路

Unity 中的性能优化是一个持续的过程。通过理解性能的基本原理、Unity 优化循环,并利用 Unity 分析器等强大的工具,你将能够找出瓶颈,并针对游戏进行明智的改进。

图片

Unity 性能和分析器

以下是关键点的简要回顾:

  • 性能至关重要。 迟滞的游戏和糟糕的帧率会很快破坏原本令人愉快的游戏体验。

  • CPU 和 GPU:性能合作伙伴。 了解 CPU 和 GPU 的协同作用可以让你了解优化将在哪里产生最大的影响。

  • 分析是你的指路明灯。 使用 Unity 分析器来照亮性能问题,准确地指出你应该专注于哪些优化工作。

  • 瓶颈是敌人。 从脚本效率低下到沉重的图形或物理,识别出可能阻碍游戏的常见性能罪魁祸首。

  • 迭代改进。 进行更改、分析、分析结果并重复。优化是一个持续的过程。

优化的力量

通过掌握 Unity 中的性能优化技巧,你可以:

  • 提供更流畅的游戏体验。 为你的玩家提供一致的帧率和响应式游戏体验。

  • 提高游戏稳定性。 减少崩溃和意外减速,尤其是在移动设备等资源有限的环境中。

  • 支持更广泛的设备。 通过优化性能,使你的游戏可以在低端设备上为玩家所用。

请记住,性能不仅仅是技术熟练,更是提供卓越的玩家体验。

想了解更多游戏开发知识,可以扫描下方二维码,免费领取游戏开发4天训练营课程

  • 30
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值