Unity性能优化1【基础篇】

前言

首先想指出本文表达的内容包括但不限于Unity引擎,属于各引擎方案通用理念。

一.经过性能优化的游戏带来的好处

经过性能优化的游戏会运行流畅,占用较小内存,包体大小降低,耗电量和发热量降低,较低的闪退率等优点;

反之,性能相对较差的游戏最致命的问题之一就是卡死,闪退等问题;

试想一下PVP战斗中在胜负未分情况下出现卡死,必须重启游戏导致对局战败,这种体验感是非常差的,会使玩家质疑这个游戏玩下去和付费的必要性,另玩家流失。

二.性能优化学习思路

性能优化和很多其他能力一样,大成之前,无需发明创造,把各种经验总结记住即可;重要的就是知其然,并知其所以然,在实际做项目时可以让我们做出最优的决策。

三.幕后的事情

要理解为什么我们的代码可能表现不佳,我们首先需要了解 Unity 构建游戏时会发生什么。了解幕后发生的事情将有助于我们就如何提高游戏性能做出明智的决定。

四.编译

当我们构建游戏时,Unity 将运行游戏所需的所有内容打包到可由目标设备执行的程序中。 CPU 只能运行用非常简单的语言(称为机器代码或本机代码)编写的代码;它们无法运行用 C# 等更复杂的语言编写的代码。这意味着Unity必须将我们的代码翻译成其他语言。这个翻译过程称为编译。

Unity 首先将我们的脚本编译成一种称为通用中间语言 (CIL) 的语言。 CIL 是一种很容易编译成多种不同本机代码语言的语言。然后,CIL 被编译为我们特定目标设备的本机代码。

五.理解为什么某些代码比其他代码执行得更好

尚未编译的代码称为源代码。我们编写的源代码决定了编译后的代码的结构和内容。

在大多数情况下,结构良好且高效的源代码将产生结构良好且高效的编译代码。

首先,某些 CPU 指令比其他指令需要更多的时间来执行。一个例子是计算平方根。与两个数字相乘等计算相比,该计算需要 CPU 更多的时间来执行。单个快速 CPU 指令和单个慢速 CPU 指令之间的差异确实非常小,但从根本上来说,了解某些指令比其他指令更快是有用的。

接下来我们需要了解的是,一些在源代码中看起来非常简单的操作在编译为机器代码时可能会非常复杂。一个例子是将元素插入到列表中。执行此操作需要更多的指令,例如通过索引访问数组中的元素。同样,当我们考虑单个示例时,我们讨论的是一小部分时间,但重要的是要理解某些操作会比其他操作产生更多的指令。

结论一:达成相同目标的简单语句存在执行快慢之分

结论二:达成相同目标的数据结构存在执行快慢之分

对有经验的程序员来说,这两个结论是比较基础的知识;但是这里提出来的重点是将其与性能优化结合到一起来加深记忆,建立逻辑,作为两个例子解释为什么这么做而不那么做。

六.区分我们的脚本代码和Unity引擎代码

区分 C# 编写的脚本与构成 Unity 引擎的代码对我们很有用。 Unity 引擎的大部分核心功能都是用 C++ 编写的,并且已经编译为本机代码。这个编译后的引擎代码是我们安装 Unity 时安装的一部分。

相关推荐
工业甲酰苯胺2 小时前
Redis性能优化的18招
数据库·redis·性能优化
无尽的大道8 小时前
深入理解 Java 阻塞队列:使用场景、原理与性能优化
java·开发语言·性能优化
loey_ln8 小时前
webpack配置和打包性能优化
前端·webpack·性能优化
郭梧悠19 小时前
HarmonyOS(57) UI性能优化
ui·性能优化·harmonyos
奈斯ing20 小时前
【Oracle篇】SQL性能优化实战案例(从15秒优化到0.08秒)(第七篇,总共七篇)
运维·数据库·sql·oracle·性能优化
青云交2 天前
大数据新视界 -- Impala 性能优化:分布式环境中的优化新视野(下)(28 / 30)
大数据·性能优化·资源管理·impala·优化策略·分布式环境·数据布局
hummhumm2 天前
第 24 章 -Golang 性能优化
java·开发语言·前端·后端·python·性能优化·golang
白茶等风121382 天前
准备阶段 Profiler性能分析工具的使用(一)
unity·性能优化
激流丶2 天前
【Redis 探秘】Redis 性能优化技巧
redis·性能优化·bootstrap