Kirino 的游戏宝藏
← 返回第 022 期
游戏观察

三十三分钟的增量账单与不可分割的包裹,Unity Content Directories 怎样在《Slime Rancher 2》上,把瓶颈钉回内容装载单元

如果说过去二十年 Unity 项目把「随 Player 外发的内容」默认收成不可分割的 AssetBundle,布局图一画错就同时拖累下载体积、内存峰值与加载等待,那么 2026 年 9 月 22 日 Unity 高级工程经理 George Ing 那篇官方博文,等于把这张二十年账单摊开,并在伙伴实测表最底下用红笔圈出另一行。

我的收藏 ↗

如果说过去二十年 Unity 项目把「随 Player 外发的内容」默认收成不可分割的 AssetBundle,布局图一画错就同时拖累下载体积、内存峰值与加载等待,那么 2026 年 9 月 22 日 Unity 高级工程经理 George Ing 那篇官方博文,等于把这张二十年账单摊开,并在伙伴实测表最底下用红笔圈出另一行。对象是 Monomi Park 的《Slime Rancher 2》。Editor 版本 Unity 6.6 Beta(6000.6.0b10),机器是 MacBook Pro M5 Max。同一套 Addressables 工程,后端从 AssetBundle 切到 content directory,Unity 称零代码改动。增量构建从三十二分十六秒落到三分四秒。干净构建从五十八分六秒落到三十七分十三秒。Player 体积从四吉字节落到二点八八吉字节,大约少掉一点一二吉字节。从启动到菜单再到进玩法,加载从四十五秒落到三十秒。

我把官方博文、Unity 6.6 文档导言,以及当日仍在流通的技术摘要对过一遍。下列数字与机制均出自公开材料,本稿未接入对方工程源码,也不冒充试玩结论。

贯穿本���的意象,是那张三十三分钟的增量账单,以及那个「不可分割的包裹」。它听起来像文件格式名,落到制作伦理上,却是一组拒绝继续为布局猜谜付税的承诺。先让工件能单独装卸,再谈分组美不美观。省下来的分钟与吉字节必须留下证据。贵的那一行也必须被点名,而不是被习惯性归因成「Addressables 分组还没画好」。

Unity 官方博文配图,Content Directories 主题图

一、二十年默认,内容等于不可分割的包裹

自 Unity 2.1 起,AssetBundle 一直托住「Player 二进制之外」那一截内容。二十年里,无数作品用它当数据表示,也包括一批大体量商业项目。基本规格很硬。每个 Bundle 在分发、存储与加载上是不可分割的单元。依赖按 Bundle 级追踪,于是许多资源被焊成更大的整块,为了效率往往要一起下载、一起加载、一起卸载。

这套规格带来一条几乎逃不掉的制作语法。标题怎样切 Bundle 布局,会直接压到运行时表现与下载体积。直接用 AssetBundle 如此,经 Addressables 包间接使用也如此。团队学会了在编辑器里画分组、猜共置、怕「改一张贴图牵出半个世界」。玩家侧与开发侧都学会了用同一套语汇阅读卡顿与包体。他们会说分组太粗、依赖链太长、热更一次下太多。这种默契让「继续画更好的分组图」变成可被原谅的制作惯性。

《Slime Rancher 2》这类已上线、已走 Addressables 的作品,偏偏把惯性成本抬得很具体。内容已经很多。增量构建动辄半小时以上。Player 已经到四吉字节量级。从开机到真正能玩,还要等将近三刻钟级的加载。默认问的是,怎样把分组再切细一点、共置再猜准一点。他们改问的是,当本地随包内容已经足够多,不可分割单元本身是不是在每轮构建与每次进关收税,而真正该进运行时的,只是可独立识别的工件。

分叉点就在这里。继续优化 Bundle 布局,是在公民税内部找更便宜的座位。换装载单元,是承认税收条目写错了。

Steam 商店《Slime Rancher 2》场面截图

二、可独立装卸的工件,稳定 id,以及内容哈希对照表

Unity 6.6 把 content directories 写成随 Player 本地交付的 AssetBundle 替代路径。措辞要钉死。它是替代路径,不是宣布 AssetBundles 退役。文档写明,content directory 构建目前只支持本地内容,不支持远程分发。细粒度 OTA 被放到 Unity 7 代再谈。远程场景里,AssetBundles 仍可继续用。

机制上,它拒绝把资产继续烤进大号可加载单元。运行时可以独立识别、加载、卸载单个工件,网格、贴图之类都算,并带隐式去重。对已经用 Addressables 管理「随 Player 打包内容」的项目,官方说法是可以切到 content directory 后端,且零代码改动。《Slime Rancher 2》伙伴实测用的正是这条路径。

构建侧走的是资产导入框架。每个资产由 importer 单独构建,沙箱、进程外、确定性,带资产库缓存、多核吃满,以及 accelerator 共享缓存。George Ing 写得很直。这与 2023.1 时预告过的多进程构建管线,是同一块地基。产出是一堆细粒度工件、一份追踪依赖的小 manifest,外加更易读的诊断文件。

寻址侧看起来像 git。打开构建产物,文件名是内容哈希。`c0152db4dd710be51b2decb997325f34.cf` 这类名字按内容哈希命名,走内容寻址。运行时因此能把相同内容隐式去重。可若工件互相用内容哈希引用,改 B 会改 B 的哈希,A 引用 B 时 A 的哈希也会抖,级联一直往上爬。Content directories 的解法是,工件之间用 stable id 引用。manifest 里留一张小对照表,把 stable id 映射到内容哈希。稳定身份与内容指纹拆开,级联抖动被掐住。

加载侧先挂载目录,读 manifest,解析工件间的 stable id 依赖,再让每个工件独立装卸。异步读与反序列化并行,吃平台异步读 API。底层文件格式是 DOTS 那一代内容文件格式的下一代写法,把过去几年给 Entities 用的多线程加载能力,铺到更广的资产类型上。引擎里还出现了新的可加载引用类型 `Loadable<T>`。示例很短。

`Loadable<Mesh> bodyMesh;``bodyMesh.Load();`

可加载引用把对象拉进构建,却要等你显式 Load 才进内存。配合熟悉的 ScriptableObject 组织方式,动态内容不必再围着 Bundle 布局图设计。角色创建器的零件、流式地形的块,都可以变成独立装卸单元。

Unity 博文示意图,源文件经构建导入器变成可加载工件

三、伙伴表上的四行,以及少掉的那十五秒进玩法

数字压住修辞。Unity 公开的对照表只有四行,却够硬。

增量构建,Addressables 走 AssetBundle 后端时三十二分十六秒,切 content directory 后三分四秒。大约省掉二十九分钟。干净构建,五十八分六秒到三十七分十三秒。Player 体积,四吉字节到二点八八吉字节。启动到菜单再到玩法,四十五秒到三十秒。少掉的那十五秒,玩家能直接摸到。少掉的一点一二吉字节,商店页与磁盘也能直接摸到。少掉的二十九分钟增量,制作日程更能直接摸到。

条件也写死了。Unity Editor 6000.6.0b10,MacBook Pro M5 Max,现有 Addressables 工程切换后端,零代码改动。这是装载单元换了、同一套 Addressables 表面仍可说话的对照。谈不上重写内容管线三个月的胜利叙事。对小团队,后者更刺耳。你未必能说服制作人开三个月重构窗口,你往往能说服他改一次后端配置,再把构建日志贴进周报。

还要把边界说清。6.6 这一刀针对本地随包内容。远程热更、CDN 差分、按需拉取,官方放到 Unity 7 代与 2027 年再展开。那时的设想是,小份哈希驱动的 manifest 能精确指出设备缺哪些工件,只拉那些,更新也落在单个工件级。眼下若把博文读成 AssetBundles 已经可以扔掉,口径会偏。本地 Player 随包内容有了替代路径。远程仍可能继续走 Bundle。文档里的 local only 写的是边界。

收束,独立等于愿意把瓶颈钉在装载单元

把这篇九月博文放回 2026 年秋天的 Unity 独立与中小团队现场,它首先打击的是一种隐蔽的制作惯性。大家默认内容该是不可分割的包裹,默认卡构建、卡包体、卡进关该怪 Addressables 分组还没画好,默认「再开一次布局会」就够了,很少有人追问。当本地内容已经冲到数吉字节,公民税是不是已经贵过分组美学本身。当增量构建还要三十三分钟,贵的究竟是机器算力,还是那个强迫你整包重算的装载单元。

对小团队,这组材料尤其有用。你未必要养一只《Slime Rancher 2》体量的史莱姆牧场,也未必有 M5 Max。你一定有自己的默认已经够用清单。某次随包内容仍按粗 Bundle 共置。某次优化会议开口就说分组再切一刀。某次热更包因为共置猜错而下掉半个世界。某次增量构建半小时,却没有人敢提议换后端。某次文档写着 local only,周报里却写成「远程方案也一并解决了」。George Ing 与伙伴表把成本写得很土。零代码切换。四行对照。稳定 id 对照内容哈希。Loadable 显式加载。贵的是愿意把瓶颈钉回装载单元,以及愿意在收据上承认。本地随包内容的替代路径已经开张,远程那张票要另买。

可执行的提示很短。

  • 先分清你的痛在本地随包,还是在远程热更。6.6 的 content directories 只覆盖前者。
  • 已有 Addressables 且内容随 Player 走时,按官方路径试切 content directory 后端,保留构建日志做前后对照。
  • 对照至少记四行。增量构建、干净构建、Player 体积、启动到玩法。没有数字,换后端只是气氛。
  • 打开构建产物,确认内容哈希文件名与 stable id 对照表是否按文档出现。级联抖动是旧税,对照表是新收据。
  • 新内容优先用 `Loadable<T>` 显式加载,少把进内存绑死在大号单元上。
  • 周报禁止写「AssetBundles 已退役」。正确说法是本地替代路径。远程策略单独立项。
  • Unity 7 / 2027 的 OTA 细粒度交付当成前瞻,不写成当前交付承诺。

三十二分十六秒的增量、不可分割的包裹、stable id 与内容哈希的对照表、四十五秒里少掉的那十五秒进玩法。在商店话术尚未把更快更小写成口号之前,制作侧已经把审计标准写进公开博文。先让工件回到可独立装卸,再让罪名钉在正确的装载单元上。

小光

来源与延伸阅读

  • George Ing,Unity Blog(2026-09-22),题为 Content Directories Beyond the AssetBundle(https://unity.com/blog/content-directories-beyond-the-assetbundle)

Unity Manual 6.6 Introduction to content directories

技术摘要核对 Unity Content Directories × Slime Rancher 2

Steam Slime Rancher 2

X 流通线索(2026-10-24)@TamaminiGrok

登录后,留下你的阅读足迹。

在个人页查看自己的点赞和收藏,换设备也能继续。

登录