我们知道,根据 Unity 官方的介绍,AssetBundle 是将资源使用 Unity 提供的一种用于存储资源的压缩格式打包后的集合,现在市面上绝大部分的网游,比如《原神》《终末地》《赛马娘》《蔚蓝档案》之类的是用了 Unity 的游戏,都是使用了 AssetBundle 来实现资源分发了。
那么鉴于团结引擎(Unity中国)官方不断作妖,开发者开始转向 Godot 之类的开源引擎的前提下,能不能为 Godot 实现一个类似 AssetBundle 的逻辑呢?
其实就是自己项目要用罢了
Godot 现有的方案
Godot 官方虽然没有提供 AssetBundle ,但是提供了一种动态载入资源的方式——PCK包加载:
即在游戏过程中,可以通过ProjectSettings.load_resource_pack函数,动态加载导出为.pck后缀或.zip后缀的补丁包,来讲游戏数据载入到文件系统中,来实现类似于热更新的效果。
但是这个方案存在局限:
- 分包困难。虽然常说 Unity 的 AssetBundle 的分包很麻烦,需要开发者自行处理来避免单包过大巴拉巴拉的……但是pck包的局限性更大,它在包含某一资源的同时,必须包含这个资源所引用的其他资源,导致各pck包直接很容易重合。
- 必须带个pck后缀(话术这真的算缺点吗)
- 无法加载 class 和 Autoload单例 脚本。
魔改引擎
事已至此,我出手了。
不过要说明,一切修改都基于 Godot 的PCK逻辑上,原则上跳不出PCK的局限性。
1.首先,我们需要确定一下这个类AB包的打包方式
我的想法是,在编辑器中增加一个类似于导出……的对话框,在其中进行 AssetBundle 的工作。
然后再将 Manifest 和真正的 Bundle 包拆分开来,先生成 Manifest,再根据生成出来的 Manifest 来打包 Bundle。
但是这样就会出现一个问题——怎么生成 Manifest?
2. 拆分资源的方式
AssetBundle 需要开发者手动分包,那既然都使用 Godot 的PCK的基底了,能不能利用一下它的局限性呢?
于是,你说……根据依赖关系,进行打包怎么样?
已知,假如有五个资源:A、B、C、D、E
A引用了C,而C又引用了E
而B只引用了D那么我们打包C,就一定会把E也打包进去
但是B没有被A、C或者E引用,所以并不会被打包进去那么为什么不能从最上层出发,将引用到的所有资源打包进一个pck呢?
这样,不就正好能处理拆包问题了吗?
于是,我启动了
Claude Code
AI 太好用了你知道吗
过程
- 我们需要让 Claude 帮我们创建一个 AssetBundle 类,用来让游戏内的 GDScript 脚本可以调用相关代码来加载我们的伪AB包。
- 随后,让它再来写一个编辑器的 Plugin,实现两个对话框:AssetBundle编辑、Manifest编辑,并将第一个对话框的入口绑定在工具栏上。
- 具体的功能实现也很简单,将上文提到的拆分方式描述给它就行了。
结果
总之巴拉巴拉
反正就是懒得写了
在花费了亿点小钱,以及亿点时间后,
最后获得了一个


最后获得的项目结构~就是:
也是很有那味了好吧。