Unity性能优化1【基础篇】

前言

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

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

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

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

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

二.性能优化学习思路

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

三.幕后的事情

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

四.编译

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

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

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

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

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

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

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

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

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

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

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

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

相关推荐
薄荷撞~可乐4 小时前
C#拆箱/装箱(性能优化)
性能优化·c#
冰 河9 小时前
《高性能SQL引擎》总结-高性能SQL引擎整体专栏总结
性能优化·程序员·高并发·架构师·高性能
bdawn15 小时前
Vue3 项目首屏加载性能优化全攻略
性能优化·vue·策略·分包
clownAdam19 小时前
Chrome性能优化秘籍
前端·chrome·性能优化
侑虎科技1 天前
iOS框架内存中占用很高的ttc文件是否正常
性能优化
CoLiuRs1 天前
异步任务使用场景与实践
微服务·性能优化·golang
zandy10111 天前
HENGSHI SENSE异构过滤架构:基于三层执行引擎的跨源联邦查询性能优化实践
性能优化·架构·agentic bi·异构结构
前端世界1 天前
从零搭建鸿蒙高效数据存储框架:RdbStore全流程实战与性能优化
华为·性能优化·harmonyos
DemonAvenger1 天前
深入Redis Zset:从原理到实践,10年经验带你解锁高效排序场景
数据库·redis·性能优化
~无忧花开~2 天前
JavaScript学习笔记(二十八):JavaScript性能优化全攻略
开发语言·前端·javascript·笔记·学习·性能优化·js