Unity性能优化教程

2023-11-07


你是否打算优化你用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
  • 自己学习使用,第一次翻译,如有差错请见谅。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity性能优化教程 的相关文章

  • ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial - UE5 Starter Course

    ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial UE5 Starter Course 教程大小解压后 4 96G 语言 英语 中英文字幕 机译 时长 4小时56分 1920X1080 mp4 虚
  • Unity3d Terrain地形制作系列(一)

    游戏简单地形 地形制作 地形制作 第一步在场景里加载一个地形对象 第二步 我们在属性面板里找到绘制地形 然后选择Set Height 绘制高度 应该我们要制作低凹的效果 所有先让他有个高度 不然是不能实现低凹的效果 如图 我们然后选择绘制地
  • 蒙特卡洛积分、重要性采样、低差异序列

    渲染公式 渲染的目标在于计算周围环境的光线有多少从表面像素点反射到相机视口中 要计算总的反射光 每个入射方向的贡献 必须将他们在半球上相加 为入射光线 与法线 的夹角 为方便计算可以使用法线向量和入射向量 单位化 的乘积表示 对于基于图像的
  • Unity-AR 简介

    Unity AR 简介 现有Unity AR Sdk ARKit 苹果推出的AR开发平台 ARCore Google 推出的增强现实 SDK ARFoundation ARFoundation是ARKit XR插件和ARCore XR插件
  • Unity动画控制器animator.CrossFade

    需要特别注意 1 CrossFade虽然可以不用任何逻辑来链接而直接跳转 但是CrossFade只能覆盖其他动画 当当前动画播放完毕而没有跳出这个动画时再次调用CrossFade将会失败 造成动画依旧停在原位 参数animator Cros
  • UnityVR--组件3--Line Renderer--线性渲染

    目录 线性渲染组件简介 绘制线条Line Renderer组件介绍 绘制拖尾Trail Renderer组件介绍 应用1 使用Line Renderer绘制线段 应用1实现 使用系统工具或自定义工具绘制线段 应用2 Trail Render
  • Unity与Android的Back键冲突解决

    Unity与Android的Back键冲突解决 上一篇的最后留下了两个问题 Unity视图下横屏闪退 Unity视图下Android无法响应back返回上一activity 对于第一个问题 应该是Unity横屏下视图的某些设置跟Androi
  • Unity学习笔记(一)—— 基础知识

    一 基础知识 1 开发团队组成 2 unity特点 图形界面 所见即所得 入门简单 支持C 比OC C 更友好 js 国内外资源丰富 因为使用的人多 跨平台性好 PC端 移动端等 对VR AR的支持最完善 3 成功案例 游戏 炉石传说 神庙
  • Unity 键盘控制人物移动——之输入方式代码的编写

    键盘输入 控制人物移动 在我们制作游戏中最常见的需求之一就是使用键盘移动游戏角色 那么我们首先需要获取键盘输入 以下提供两种方法获取键盘 这里尽量通过截图解释让大家理解代码的含义 GetInput void FixedUpdate Move
  • VLC for unity 插件如何使用

    VLC for unity 插件如何使用 先去下载一个VLC播放器 安装完成后 然后导入插件链接https download csdn net my 这个插件我的另一个上传资源里有 或者到商店去下载 这个插件链接下载完是一个txt文档 里面
  • unity3d切换场景Application.LoadLevel(1)含义

    Application LoadLevel 1 场景ID
  • Unity万向节死锁解决方案(2023/12/4)

    1 万向节死锁无法解决 这是因为它的特性就是如此 就像玻璃杯就是玻璃 这不可否认 别钻牛角尖昂 2 大多数情况下欧拉角足够用 例如 CF 摄像机不可能绕z轴旋转 x轴旋转也不会超过九十度 因为那样人物的腰子会被扭断 塔防游戏 保卫萝卜 吃鸡
  • 【原神游戏开发日志1】缘起

    原神游戏开发日志1 缘起 版权声明 本文为 优梦创客 原创文章 您可以自由转载 但必须加入完整的版权声明 文章内容不得删减 修改 演绎 相关学习资源见文末 大家好 最近看到原神在TGA上频频获奖 作为一个14年经验的游戏开发行业的老兵 我就
  • unity小球跟随音乐节奏放大缩小和改变颜色

    放在小球身上 设置对应组件即可 using System Collections using System Collections Generic using Unity VisualScripting using UnityEngine
  • 微信游戏如何开发

    中懿游游戏软件开发 微信游戏开发通常涉及使用微信小游戏平台进行开发 微信小游戏是一种在微信平台上运行的轻量级游戏 用户可以在微信中直接体验 无需下载安装 以下是在微信平台上开发小游戏的一般步骤 1 注册微信开发者账号 访问 微信开放平台 注
  • Unity中URP下的指数雾

    文章目录 前言 一 指数雾 雾效因子 1 FOG EXP 2 FOG EXP2 二 MixFog 1 ComputeFogIntensity 雾效强度计算 2 lerp fogColor fragColor fogIntensity 雾效颜
  • U3D游戏开发中摇杆的制作(NGUI版)

    在PC端模拟摇杆 实现控制摇杆让玩家或者物体移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine public clas
  • 游戏开发常见操作梳理系列之——玩家信息的显示系统

    在游戏中 有不少游戏在左上角会出现玩家的头像和等级以及血量 这就是玩家的信息显示系统 那么这些是如何制作的呢 接下来我将讲讲代码的操作 其它操作我会在其它笔记中一一说明 敬请期待 信息的显示相当简单就是控制一些UI 然后在其它系统里面填写相
  • 游戏开发常见操作梳理之NPC药品商店系统(NGUI版)

    后续会出UGUI Json的版本 敬请期待 游戏开发中经常会出现药品商店 实际操作与武器商店类似 甚至根据实际情况可以简化设置 废话不多说 直接上代码 药品商店的源码 using System Collections using Syste
  • 游戏开发常见操作梳理之角色选择一

    进入游戏后 我们经常会进入角色选择的界面 通常是左右两个按钮可以更改角色供玩家选择 对于这种界面我们通常使用数据持久化将角色信息存储起来 接下来的笔记中 我将使用自带的数据持久化系统对其进行操作 实现角色的选择页面 后续会更新xml系列的文

随机推荐

  • 如何管理和快速登录多台服务器(基于expect)

    背景 shell快速登录多个机器 平时需要经常切换多个机器 或者需要通过跳板机来回换登录机器 为了便于自己快速登录 和每次找机器 写了登录管理工具https github com cgpeter96 shell blob main logi
  • Unity--使用Line Renderer实现画图划线效果

    using UnityEngine public class Draw MonoBehaviour public GameObject linePrefab 线条渲染器 private LineRenderer line 顶点下标 priv
  • 2023-05-24 题目

    ArrayList源码分析 package java util import java util function Consumer import java util function Predicate import java util
  • Mac电脑远程访问pc端Microsoft Remote Desktop

    Microsoft Remote Desktop是Mac上的远程连接Windows电脑的工具 可以轻松使用应用程序和数据 进行视频和声音流改进的压缩和带宽使用 连接到多个显示器或投影机进行演示等 在弹出的对话框中 输入 Windows 实例
  • java初识之HelloWorld

    Hello World 随便新建一个文件夹 存放代码 新建一个java文件 1 文件后缀名为 java 2 Hello java 注意点 系统可能没有显示文件后缀名 我们需要手动打开 编写代码 public class Hello publ
  • 在connect中使用lambda实现高效的信号/槽关联

    在Qt中 使用QCoreApplication connect 函数连接信号 signal 与槽 slots 的功能 以下是connect函数的三种重载形式 static QMetaObject Connection connect con
  • Linux 命令大全

    系统信息 arch 显示机器的处理器架构 1 uname m 显示机器的处理器架构 2 uname r 显示正在使用的内核版本 dmidecode q 显示硬件系统部件 SMBIOS DMI hdparm i dev hda 罗列一个磁盘的
  • 超模脸、网红脸、萌娃脸...换头像不重样?我开源了5款人脸生成器

    出品 AI科技大本营 ID rgznai100 英伟达近日提出的新一代 StyleGAN 通过对 StyleGAN 的生成效果分析 他们对不完美的工作设计了改进和优化方法 使得生成图片的质量和效果更上一层楼 如今 用 StyleGAN 技术
  • 第四章:综合布线

    一 综合布线 1 PDS综合布线系统的作用优势 1 PDS综合布线 将复杂的强电 弱电 安防系统按照子系统划分 不同的子系统负责不同的功能方便管理和扩展 2 PDS优势 结构清晰方便管理 材料统一先进适应发展 灵活性强易于扩展 增强可靠性节
  • 你如何使用Python制作网站?

    在本文中 我们将讨论如何使用Python制作网站 Python 是一种 1991 年的编程语言 在过去十年中越来越受欢迎 如今 Python编码器在计算机行业中的需求量很大 Python是一种通用编程语言 这意味着它几乎可用于开发任何类型的
  • 腾讯云演示nginx(若依项目)

    负载均衡 负载均衡介绍 Load balancing 即负载均衡 是一种计算机技术 用来在多个计算机 计算机集群 网络连接 CPU 磁盘驱动器或其他资源中分配负载 以达到最优化资源使用 最大化吞吐率 最小化响应时间 同时避免过载的目的 负载
  • ES6语法(一)

    var let const的区别 var声明的变量 let声明的变量 const声明的变量 作用域 全局 当前代码块 当前代码块 是否提升 提升 被提升到js代码最上面 不提升 必须先声明再使用 不提升 必须先声明再使用 是否可重新赋值 可
  • Could not set parameters for Parameter index out of range (12 > number of parameters, which is 11)处理

    nested exception is org apache ibatis type TypeException Could not set parameters for mapping ParameterMapping property
  • leetcode 51. N 皇后

    N 皇后 题目链接 N皇后 题目 思路 用回溯方法 先构造出一个棋盘二维数组 每行选择一个位置放皇后Q 再不断回溯 代码 class Solution vector
  • 基于 STM32CubeMX 添加 RT-Thread 操作系统组件(十六)- 双向链表

    概述 本篇主要介绍这么使用STM32CubeMx工具添加RT Thread操作系统组件 码代码的IDE是keil 介绍单线程SRAM静态内存使用 如果还不知道 这么使用STM32CubeMx工具添加RT Thread操作系统组件 请移步到
  • 如何用人工智能提高企业效率?

    现在人工智能的发展越来越快 各风投纷纷进行人工智能领域 如果企业能够利用互联网 人工智能 行业 必定是这个行业未来的独角兽 那么如何用人工智能提高企业效率 现在越来越多的大公司或企业都依靠人工智能来发展其相关的服务 产品和工具 特别是许多耗
  • Redis 缓存数据库

    目录 提高缓存的命中率 Redis 高可用方案 高可用概念 Redis 高可用的实现方案 1 主从模式 2 哨兵模式 3 集群模式 Redis 大key问题 什么是 Redis 大key问题 Redis 大 key 带来的问题 Redis
  • Go渗透测试笔记(一)

    GO渗透测试笔记 0X01 基本使用 当在某些极端的情况可以使用go build ldflags w s 进行编译 从二进制文件中剥离调试信息和字符表 从而减少文件的大小 适合在某些极端的情况进行嵌入 大约可以减少 30 创建使用不同架构上
  • I2C走线技巧、及上拉电阻、电源电压、总线电容三者间的函数关系

    目录 I2C总线PCB布线注意事项 博客其他文档可以学习 https www cnblogs com zhiqiang zhang I2C总线线路的走线方式 I2C器件与I2C总线的接线方式 I2C总线连接规范 I2C总线中上拉电阻 电源电
  • Unity性能优化教程

    目录 一 主要优化周期 二 性能问题的各种类型 1 Spikes 1 垃圾收集器的Spikes 2 每一帧的成本 3 加载时间 1 开放世界 4 内存使用 三 性能分析 你是否打算优化你用Unity制作的游戏并获得最佳的性能表现 在这个完整