网易首页 > 网易号 > 正文 申请入驻

团结引擎小游戏平台 Burst 编译器支持 —— 提升小游戏运行性能与控制包体大小

0
分享至

在小游戏开发中,CPU 性能瓶颈和包体大小是开发者面临的两大核心挑战。Burst是一个基于 LLVM 的深度优化后端编译器,能够将 C# 高性能计算子集(HPC#)编译为高度优化的机器码,显著提升 CPU 密集型计算的运行帧率。同时,针对小游戏的包体敏感性,我们为 Burst 引入了独有的Managed回退分支裁剪功能,在保证性能的前提下有效控制 wasm 包体大小。

Burst 的 HPC# 代码不经过 IL2CPP 转换,而是直接通过 Burst 优化器生成 LLVM IR,经由 LLVM 优化器产出高效的 wasm 代码,绕过了 IL2CPP 对 .NET垃圾回收机制的模拟,并能够基于 HPC# 的严格假设执行更激进的内联、循环展开和向量化优化。值得关注的是,Burst 可以独立于 Job/ECS 使用,开发者不必依赖完整的 DOTS 框架。

Burst 编译器(com.unity.burst)现已支持团结引擎小游戏平台。其中,Burst Package 1.8.21 及以上支持小游戏平台的基本编译优化功能,Managed 回退分支裁剪功能要求 Burst Package 1.8.27 及以上(引擎版本 Tuanjie 1.9.0 及以上)。

Burst 带来的收益

丨性能收益

在小游戏场景中,诸如物理碰撞、大量实体的裁剪计算、避障算法、粒子模拟等 CPU 密集型任务往往是性能瓶颈。Burst 编译器通过 LLVM 的编译层级优化,能够显著加速这些计算过程,无需修改业务逻辑即可获得可观的帧率提升。

以下性能数据基于 oppo A5 测试机、微信小游戏平台测得,裁剪等级为 Medium。

丨Infinity 粒子系统场景

Infinity 粒子系统(团结引擎粒子系统)是大规模使用 HPC# 编写并用 Burst 编译的典型项目。其核心计算逻辑(粒子模拟、采样、裁剪等)全部采用 HPC# 实现,充分利用了 Native 容器、Unity.Mathematics 等特性,并通过 SOA 数据组织方式进一步优化计算性能。因此,Infinity 的测试场景(Main、Test200、TestSingle)能够充分验证 Burst 编译优化和包体裁剪的实际效果。该测试场景来自开源项目Infinity Benchmark Suite,开发者可自行下载运行。

丨Main 场景

指标

Burst+裁剪

不开启Burst

Burst无裁剪

优化效果

FPS(帧率)

36.1

2.3

34.6

+1469%

wasm包体(KB)

24,223

24,050

25,646

-5.5%

丨TestSingle 场景

指标

Burst+裁剪

不开启Burst

Burst无裁剪

优化效果

FPS(帧率)

56.9

1.2

57.7

+4642%

wasm 包体(KB)

23,923

23,783

25,609

-6.6%

注:Infinity 场景中不开启 Burst 时帧率极低,是因为粒子系统在帧率不足时会触发多步模拟(Multi-Step)机制——即在一帧内执行多次物理模拟以追赶落后的时间步,进一步加重 CPU 负担,导致帧率持续恶化。开启 Burst 后帧率回归正常水平,多步模拟不再触发,性能得以充分发挥。因此,Infinity 场景的 FPS 提升幅度包含了多步模拟机制消除后的叠加效果。

第三方插件场景(Asset Store 插件及算法测试)

丨Congi 场景

指标

Burst+裁剪

不开启Burst

Burst无裁剪

优化效果

FPS(帧率)

20

8.1

20.2

+147%

wasm 包体(KB)

18,896

18,694

18,972

-0.4%

丨Duck 场景(软光栅化)

指标

Burst+裁剪

不开启Burst

Burst无裁剪

优化效果

FPS(帧率)

34.1

14.6

33.8

+134%

wasm 包体(KB)

18,355

18,301

18,433

-0.4%

丨Noise 场景(噪声算法)

指标

Burst+裁剪

不开启Burst

Burst无裁剪

优化效果

FPS(帧率)

3.9

2.2

3.9

+77%

wasm 包体(KB)

18,154

18,132

18,202

包体收益

Burst 编译器的激进内联优化在提升性能的同时,可能会导致 wasm 包体膨胀。为此,团结引擎小游戏平台针对 Burst 引入了Managed 回退分支裁剪功能。开启裁剪后,在帧率无明显降低的前提下,wasm 包体大小得到有效控制:

- 开启 Burst + 包体裁剪后,包体相比不裁剪可减少 0.3% 至 6.6%,帧率几乎不变

- 开启 Burst 后的包体与不开启 Burst 的包体大小相当,引入 Burst 不会导致包体明显增大

包体裁剪功能

通过引入 Managed 回退分支裁剪功能,Burst 在小游戏平台上实现了提升帧率的同时包体不会明显膨胀。下面介绍其原理和使用方式。

丨为什么需要裁剪

Burst 编译器在处理标记了 [BurstCompile] 的 HPC# 函数和 Job 函数时,除了生成经过 Burst 优化器深度优化的 Native Code(最终编译为 wasm)之外,还会保留一份内容与原函数完全相同的 Managed 回退函数。这份 Managed 回退函数并非由 Burst 编译,而是会经过 IL2CPP 编译出现在最终的 wasm 包体中。

Managed 回退分支的设计初衷是:当 Burst 运行时未启用时,系统可以经由 Managed 回退函数回到 C# 原始实现。但在小游戏平台上,Burst 始终以 AOT 方式编译,不存在回退场景,因此经过 IL2CPP 编进包体的 Managed 回退函数成为纯粹的冗余代码,会导致 wasm 包体膨胀。

丨裁剪实现原理

包体裁剪的核心思路是:在 IL2CPP 编译链路中裁剪掉 Managed 回退函数,这样 Managed 回退函数就不会出现在最终的 wasm 包体中。

具体实现上,团结引擎在编译流程中新增了 Managed 回退分支裁剪步骤,检测到 Managed 回退函数时将其函数体替换为抛异常的代码。经过这样处理后的代码作为 IL2CPP 的输入,IL2CPP 生成的 wasm 中便不再包含这些冗余的 Managed 回退函数实现,从而有效降低了包体大小。由于小游戏运行时 Burst 始终启用,优化后的 Native Code 会优先执行,替换后的异常代码永远不会被触发,不影响实际运行。

丨使用方式

1. 在Player Settings中,将 "Managed Stripping Level" 设为"Medium"或以上


2. 在Burst AOT Settings中,勾选"Enable Burst Compilation"

3. 在Burst AOT Settings中,勾选"Strip Burst Managed Method"(该选项仅在 Enable Burst Compilation 开启时可见)


注:当 "Managed Stripping Level" 为 "Medium" 及以上,且同时勾选了 "Strip Burst Managed Method" 时,裁剪编译流程才会生效。

丨验证裁剪效果

打包完成后,可在打包输出目录下找到 webgl/Build/webgl.wasm 文件,对比开启和不开启 "Strip Burst Managed Method" 时该文件的大小差异,即可确认裁剪效果。以含 Infinity 粒子系统的项目为例,开启裁剪后 wasm 包体可减少约 1,918 KB(约 6%)。裁剪比例与 HPC# 代码在整个项目代码中的占比呈正相关——项目中使用 HPC# 编写的代码越多,裁剪效果越明显。

Burst 如何使用

丨快速使用

开发者可以通过以下方式在项目中使用 Burst。

1. 确认使用方式

Burst 支持两种使用方式,开发者可根据项目场景选择:

-Job.Run 方式:适合已有 Job 系统的项目。在小游戏单线程环境下,只需将 Job.Schedule 改为 Job.Run 即可执行

- 静态函数调用方式:适合将计算逻辑封装为独立函数的场景。将计算逻辑封装在静态函数中,加上 [BurstCompile] 标签即可被 Burst 编译优化

注意:函数外围的 class/struct 也需要加上 [BurstCompile] 标签。Burst 会先查找类型上的标签,再去编译内部标记的函数。

2. 确认 Build 设置

打包时需确认以下设置:

1.Burst AOT Settings中勾选 "Enable Burst Compilation"

2. 如需包体裁剪,勾选 "Strip Burst Managed Method",并将 "Managed Stripping Level" 设为 "Medium" 或以上

最佳实践

业务逻辑与算法分离:Burst 更适合计算密集的算法,而非多态/继承较多的业务逻辑。建议将核心计算逻辑改写为 HPC# 并用 Burst 编译,封装成独立接口供上层业务逻辑调用。

HPC# 替换步骤:在完成业务逻辑与算法的分离后,将算法部分的 C# 代码转换为 HPC# 的通用步骤如下:

1. 替换托管内存为非托管内存:class → struct

2. 替换容器类型:

Array → NativeArray,

List → NativeList,

Dictionary → NativeHashMap

3. 提炼计算过程为 static 方法:在方法和所属类型上标注 [BurstCompile]

4. 替换数学库:System.Math → Unity.Mathematics

其他注意事项:

-使用 in/ref 传递 struct:HPC# 主要使用 struct,Native 容器中的 struct 元素必须以 in 或 ref 方式传递,否则会导致 BC1064 编译错误

-手动内存管理:Native 容器使用完毕后需要显式调用 Dispose 释放内存

总结

团结引擎小游戏平台 Burst 编译器支持为开发者带来了两大核心价值:

1.显著的性能提升:测试表明,开启 Burst 后,第三方插件和算法场景的帧率可获得 77% 至 147% 的提升;Infinity 粒子系统等大规模使用 HPC# 的项目,性能收益更为显著。效果因代码中计算密集程度而异,计算越密集提升越明显

2.可控的包体大小:通过独有的 Managed 回退分支裁剪技术,开启 Burst + 裁剪后,wasm 包体相比不裁剪可减少 0.3% 至 6.6%,同时帧率几乎不受影响。裁剪比例与 HPC# 代码在整个项目代码中的占比呈正相关——项目中使用 HPC# 编写的代码越多,裁剪效果越明显。且引入 Burst 后的包体与不开启 Burst 的包体大小相当,不会给小游戏带来额外的包体压力

Burst 作为 DOTS 技术栈中独立的一环,可以脱离 Job/ECS 单独使用。开发者只需将计算密集的算法逻辑改写为 HPC#,加上 [BurstCompile] 标签,即可在小游戏平台上享受 LLVM 带来的深度编译优化。展望未来,随着 AI 辅助开发逐渐成为趋势,我们计划将 HPC# + Burst 的最佳实践蒸馏为可复用的开发 Skill,帮助开发者更便捷地将业务中的计算密集模块改写为 HPC# 并应用 Burst 编译优化,降低使用门槛,让更多小游戏项目享受到高性能计算带来的体验提升。

扫描海报中二维码预约直播⬇️和团结引擎一起技术进阶!

B站直播间预约二维码


Unity 官方微信

第一时间了解Unity引擎动向,学习进阶开发技能

每一个“点赞”、“在看”,都是我们前进的动力


特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
WTT中国大满贯:大爆冷!男单头号种子1:4被淘汰,无缘世界第1

WTT中国大满贯:大爆冷!男单头号种子1:4被淘汰,无缘世界第1

国乒二三事
2026-10-10 15:23:54
史上最大退休潮来了!平均每天6万人退休

史上最大退休潮来了!平均每天6万人退休

城事堂
2026-10-10 09:30:08
郑钦文首进中网决赛刷爆纪录:中国首人+外卡首人 重返世界前30

郑钦文首进中网决赛刷爆纪录:中国首人+外卡首人 重返世界前30

醉卧浮生
2026-10-10 20:48:18
凡某林头部被砸,抢救无效死亡,多人被建议追责

凡某林头部被砸,抢救无效死亡,多人被建议追责

南方都市报
2026-10-10 12:57:30
真的感动了!游客逛许昌胖东来,把91.4元现烤面包忘寄存柜,人已回陕西!本是自己失误,商家却全额退款

真的感动了!游客逛许昌胖东来,把91.4元现烤面包忘寄存柜,人已回陕西!本是自己失误,商家却全额退款

火山詩话
2026-10-10 20:39:33
郑钦文微笑握拳庆祝!首进中网决赛获410万奖金 世界排名升至第28

郑钦文微笑握拳庆祝!首进中网决赛获410万奖金 世界排名升至第28

我爱英超
2026-10-10 20:57:30
连续2轮夺冠延后!4.2万蓉城球迷怒了:久久不愿离场 训话50岁洋帅

连续2轮夺冠延后!4.2万蓉城球迷怒了:久久不愿离场 训话50岁洋帅

我爱英超
2026-10-10 22:38:41
郑钦文2次被观众逼急!大声喊:不要说话 摊手发问:你能别走吗?

郑钦文2次被观众逼急!大声喊:不要说话 摊手发问:你能别走吗?

风过乡
2026-10-10 21:34:27
尊界制动踏板支架断裂后,岚图、本田、仰望等多家车企高管晒自家刹车部件

尊界制动踏板支架断裂后,岚图、本田、仰望等多家车企高管晒自家刹车部件

澎湃新闻
2026-10-10 10:54:30
舆论反转!尊界踏板支架断裂事件,余承东淡定反应获网友力挺,直言“余总这波,输没输产品另说,至少没输人”

舆论反转!尊界踏板支架断裂事件,余承东淡定反应获网友力挺,直言“余总这波,输没输产品另说,至少没输人”

火山詩话
2026-10-09 14:57:30
女子转卖男友送的300万手表,才发现竟是其偷的,男友为挽回感情趁朋友乔迁之际偷走......

女子转卖男友送的300万手表,才发现竟是其偷的,男友为挽回感情趁朋友乔迁之际偷走......

都市快报橙柿互动
2026-10-10 17:41:57
大使馆紧急发声!中国公民做好防范,确诊病例超8000例,无特效药

大使馆紧急发声!中国公民做好防范,确诊病例超8000例,无特效药

霁寒飘雪
2026-10-10 12:12:46
门诊量突然激增!上海新华医院确诊多名“汞中毒”患儿,“可能进脑子里”!

门诊量突然激增!上海新华医院确诊多名“汞中毒”患儿,“可能进脑子里”!

环球网资讯
2026-10-10 17:42:12
武网下下签!郑钦文又遇到萨巴伦卡,球迷提议:中网夺冠就退赛吧

武网下下签!郑钦文又遇到萨巴伦卡,球迷提议:中网夺冠就退赛吧

侃球熊弟
2026-10-10 16:48:59
创历史!郑钦文2-0横扫梅尔滕斯首进中网决赛 将战安德列娃争冠

创历史!郑钦文2-0横扫梅尔滕斯首进中网决赛 将战安德列娃争冠

醉卧浮生
2026-10-10 20:41:00
自闭症男童乘电梯遭男子踹倒"被踹后自己躲起来"

自闭症男童乘电梯遭男子踹倒"被踹后自己躲起来"

看看新闻Knews
2026-10-10 23:52:06
史无前例!iPhone Duo首次开机显示用户名:情绪价值拉满

史无前例!iPhone Duo首次开机显示用户名:情绪价值拉满

快科技
2026-10-10 17:42:04
新华社删除尊界汽车,彻底结束了!

新华社删除尊界汽车,彻底结束了!

财经三分钟pro
2026-10-09 16:32:40
王皓被多人围堵并持续辱骂,3人被拘后均未满20岁......

王皓被多人围堵并持续辱骂,3人被拘后均未满20岁......

新民周刊
2026-10-10 20:41:37
演员周杰透露10年来每天只吃1顿饭,网友质疑“不健康”,医生提醒:长期如此容易营养缺乏

演员周杰透露10年来每天只吃1顿饭,网友质疑“不健康”,医生提醒:长期如此容易营养缺乏

极目新闻
2026-10-09 22:50:14
2026-10-11 00:07:00
Unity incentive-icons
Unity
Unity中国官方帐户
2520文章数 6737关注度
往期回顾 全部

科技要闻

上世纪成熟的踏板,为何今天还会断裂?

头条要闻

港媒:梅艳芳骨灰被盗三个月无线索 歌迷会公开求助

头条要闻

港媒:梅艳芳骨灰被盗三个月无线索 歌迷会公开求助

体育要闻

十年回首:湖人三榜眼的夏天,与NBA无关

娱乐要闻

宋佳一串三大满贯 争议随之而来

财经要闻

双汇因抗生素超标共被罚1.29亿元

汽车要闻

千匹马力+三把锁/顶配能浮水 银河战舰700限时焕新价16.98万起

态度原创

本地
教育
房产
家居
军事航空

本地新闻

踏访沙县第一村,寻国民小吃本源

教育要闻

“考一半,突然通知全国考试取消”

房产要闻

海棠湾销冠再出牌:海南顶豪「终局答案」,突然砸出!

家居要闻

2026建博会(广州) 公装联探展交流活动

军事要闻

美乌将举行新一轮会谈

无障碍浏览 进入关怀版