Unity性能优化1【基础篇】

前言

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

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

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

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

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

二.性能优化学习思路

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

三.幕后的事情

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

四.编译

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

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

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

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

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

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

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

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

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

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

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

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

相关推荐
Jmyd012314 小时前
Web端3D营销展厅技术实现路径:从素材上云到线索回流的数据链路
前端·3d·性能优化·三维数字化
CCblandy15 小时前
令牌桶在 0.9 倍负载超发 19%、固定窗口边界放行 20 个:四种限流算法同构实测
后端·python·算法·性能优化·架构
a59865220 小时前
Docker云手机端口不通,无法访问|六边云手机教你故障排查完整流程
docker·容器·性能优化·云手机
oradh1 天前
Oracle SQL性能优化案例----数据入库和更新任务
sql·oracle·性能优化
打工仔折腾 AI1 天前
CentOS 7 单机部署 Elasticsearch 7.17.29:启动报错排查与 CRUD 验证
人工智能·后端·python·elasticsearch·性能优化·centos·jenkins
HEJOO91 天前
iOS 性能优化全面详解
ios·性能优化·cocoa
yunwei371 天前
eBPF 实例教程:BPF Arena 零拷贝共享内存
linux·后端·性能优化
对象存储与RustFS1 天前
用 warp 压测 S3 兼容存储,十分钟跑出一份可复现的基准报告
后端·云原生·性能优化
martindelophy2 天前
浏览器视频导出太慢怎么优化?一次 WebCodecs 实践:8 分钟视频耗时降低 31%
性能优化·音视频·优化
CCblandy2 天前
HTTP 长连接 3 类故障实测:[WinError 10053]、99 个 TIME_WAIT、69 次多余握手,4 种对策怎么选
后端·python·网络协议·http·云原生·性能优化·架构