目录

  • 一、主要优化周期
  • 二、性能问题的各种类型
    • 1. Spikes
      • (1)垃圾收集器的Spikes
    • 2. 每一帧的成本
    • 3. 加载时间
      • (1)开放世界
    • 4. 内存使用
  • 三、性能分析

你是否打算优化你用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
  • 自己学习使用,第一次翻译,如有差错请见谅。

Unity性能优化教程相关推荐

  1. Unity性能优化(2)-官方教程Diagnosing performance problems using the Profiler window翻译

    http://www.cnblogs.com/alan777/p/6135703.html Unity性能优化(2)-官方教程Diagnosing performance problems using ...

  2. 【Unity性能优化】静态资源优化——Audio优化

    文章目录 写在前面 1. 前言 2. 使用Asset Checker进行资源检测 3. Audio优化 3.1 启用Force to Mono 3.2 压缩格式与采样率 3.3 音乐加载类型 3.4 ...

  3. 这可能是最好的性能优化教程(三)

    这可能是最好的性能优化教程系列专栏 这可能是最好的性能优化教程(一) 这可能是最好的性能优化教程(二) 这可能是最好的性能优化教程(三) 前言 内存泄漏从来都是我们老生常谈的话题,无论是 Androi ...

  4. Unity性能优化 – 脚本篇

    最近开始进行Unity性能优化的工作,主要分为三类:CPU.GPU和内存.由于我们游戏的核心战斗是计算密集型,所以主要是受限于CPU.CPU的优化又分为渲染和脚本,本文将着重于脚本优化. 一般来说,优 ...

  5. Unity性能优化 :合批篇

    前言 本系列为一些性能优化的小知识,是日常游戏开发中与性能表现的一些点,本篇为该系列文章的第二篇,前篇链接: 第一篇: Unity性能优化:资源篇 在早期Unity中,对于合批的处理手段主要是下面三种 ...

  6. Unity 性能优化:资源篇

    Unity性能优化 大的方面来说,通过Unity对于项目的性能优化大概可以分为下面几个部分: 资源 渲染 程序 项目配置 而在这个部分中,资源的性能优化属于最基础.最有效的优化手段,也是游戏开发者日常 ...

  7. Mysql 性能优化教程

    Mysql 性能优化教程 l  厦门游家公司(4399.com)用于员工培训和分享. l  针对用户群为已经使用过mysql环境,并有一定开发经验的工程师 l  针对高并发,海量数据的互联网环境. l ...

  8. Mysql性能优化教程

    原文: http://wenku.baidu.com/view/aa43ecc3aa00b52acfc7ca94.html?st=1 MySQL性能优化教程 目录 目录 1 背景及目标 2 Mysql ...

  9. Unity 性能优化(力荐)

    开始之前先分享几款性能优化的插件: 1.SimpleLOD : 除了同样拥有Mesh Baker所具有的Mesh合并.Atlas烘焙等功能,它还能提供Mesh的简化,并对动态蒙皮网格进行了很好的支持. ...

最新文章

  1. forward declaration of class 错误
  2. Kotlin极简教程:第5章 集合类
  3. python opencv图片旋转180度_Python opencv图像镜像翻转
  4. 前端 datatable 居中_Midway Serverless 如何让阿里前端提效 50%?
  5. 苹果失策?新iPhone捆绑Apple TV+或会致硬件利润率下滑
  6. poj 1753 Flip Game 高斯消元 异或方程组 求最值
  7. mac如何判断本机有没有gpu_属牛人:属牛如何判断一段感情有没有未来
  8. Java学习笔记 --- IDEA
  9. mac环境下Android 反编译
  10. 全国最大SLAM开发者学习交流社区 欢迎加入
  11. 程序猿的创业故事:一个游走于计算机编程、高中数学、高中物理、爱好木工的全栈工程师,转行做高中教学的亲生经历!
  12. Zookeeper特点及理解
  13. vim 怎么显示空格_vi查看空格、制表符等特殊符号
  14. BZOJ5109:[CodePlus 2017]大吉大利,晚上吃鸡! (最短路+Hash表+二进制压位)
  15. dbt-tidb 1.2.0 尝鲜
  16. 网络诊断显示服务器有问题,Win7系统网络诊断提示DNS服务器未响应怎么解决
  17. 深度模型压缩技术在智能座舱方案的探索与实践
  18. java中GUI中显示当前时间_javaGUI界面实现动态时间显示——Swing中的计时器Timer
  19. 编译出现问题:-Dmaven.multiModuleProjectDirectory=$M2_HOME
  20. Kup Buty Under Armour także czynników bocznych

热门文章

  1. Linux centos 下 eclipse 打开文件时关闭
  2. 如何制作一个简单的短视频 app
  3. Docker与ROS分布式通信
  4. 资深玩家如何通过tiktok月入十万
  5. 【GPT4】微软 GPT-4 测试报告(2)多模态与跨学科的组合
  6. C++的流读取字符时的小坑
  7. 绝地求生6月22号服务器维护中,绝地求生2019年5月22日维护到几点?吃鸡5月22日更新内容...
  8. 用pandas 制作excel透视表
  9. 2018.10.1(这不仅是一篇日记,也是mac使用心得整理,未完待续……)
  10. 如何在 Android上恢复已删除的照片? 3个有效方法请收藏