Files
dc-docs/output/feishu-docs/FYKlwX7D5ibbmSkaVMucgKAWnOe.md
T
2026-06-23 14:43:31 +08:00

128 lines
9.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# FYKlwX7D5ibbmSkaVMucgKAWnOe
Source: https://dianchukeji.feishu.cn/wiki/FYKlwX7D5ibbmSkaVMucgKAWnOe
# 一.工作内容概述
- 使用 AI 分析《佛系消消消》的资源分包加载机制,结合本地缓存、运行日志和 Addressables catalog 文件,解析出关卡分包对应的 CDN bundle 地址,批量拉取主线 33 个关卡资源包并完成解包解析,提取主线普通关卡 3296 关,连同双牛模式、方块模式,总计整理 4452 关独立关卡数据。
- 优化关卡生成器逻辑,提升其产出交付合规关卡的稳定性
- 参与AI游戏开发交流会
# 二.《佛系消消消》关卡数据提取
利用AI对手机本地的《佛系消消消》包体资源进行了逆向分析和提取,目标是获取游戏中的完整关卡数据,并理解其关卡文件组织方式和加载逻辑。
前期已经通过解包确认,主包中只内置了第一批关卡 LevelPart01,后续 LevelPart02-33 并没有直接存在于本地包体中。后续继续通过逆向解包、日志分析、本地缓存检查和 catalog 解析的方式,最终整理出游戏远程关卡分包的真实下载链路。
## 试错过程概述
一开始尝试从几个方向直接查找关卡数据:
- 逆向解包主包,搜索 LevelPart02-33;
- 检查本地缓存目录,寻找已下载的分包文件;
- 尝试抓包观察游戏运行时的资源请求;
- 直接猜测服务器接口或资源路径。
但这些方式都没有直接得到完整关卡。
主要原因是:
因此后续思路调整为:**不再直接搜索关卡文件,而是先还原游戏的远程资源加载链路。**
## 最终提取流程
### 逆向解包主包,确认资源不完整
首先对游戏主包和 Unity 资源文件进行逆向解包分析。
解包后发现,主包中确实存在部分关卡文本和配置表,例如 LevelPart01、LevelJsonBatchMap、LevelId、DailyLevel 等。
但同时也确认了一点:**主包中只注册和内置了第一批关卡,后续 ****LevelPart02-33**** 并不在主包内。**
这说明完整关卡数据不是一次性打进本地包体,而是采用远程分包加载方式。
### 分析运行日志,寻找 CDN 入口
确认主包中没有完整关卡后,下一步转向运行日志。
运行日志中记录了游戏启动和加载资源时的一些路径、版本号和远程地址。
虽然日志不会直接列出全部关卡文件,但可能会暴露远程资源系统的入口。
这次在日志中找到了关键线索:**游戏使用的是 Unity Addressables 远程资源加载机制,并且日志中出现了 CDN 上的 ****settings.json**** 地址。**
可以把 settings.json 理解为远程资源系统的“入口说明书”。它主要告诉游戏:
- 当前资源版本是多少
- 资源目录在哪里
- 后续 catalog 应该怎么加载
有了 CDN 入口后,后续就不需要继续盲猜,而是可以顺着资源加载链路继续追踪。
![图片](../feishu-images/FYKlwX7D5ibbmSkaVMucgKAWnOe_GxcdbU9g3orO.png)
### 确认资源版本,定位 catalog
远程资源通常会按版本管理。
如果版本号不对,即使 CDN 路径正确,也可能找不到对应资源。
通过日志和本地 hash 文件整理后,确认当前有效资源版本是 0.0.106。
![图片](../feishu-images/FYKlwX7D5ibbmSkaVMucgKAWnOe_DnQ5bajDFoJy.png)
![图片](../feishu-images/FYKlwX7D5ibbmSkaVMucgKAWnOe_N6kKb37syoZd.png)
接下来根据资源版本继续寻找 catalog 文件。
这里可以把几个文件的关系理解为:
- settings.json = 入口说明书
- catalog = 资源目录
- bundle = 真正的资源包
- LevelPart = 关卡内容
其中,catalog 是最关键的一环。
它本身不直接保存关卡内容,但会记录每个资源分包的真实 CDN 下载地址。
### 结合本地缓存与运行日志,确认 catalog 版本
这一步是本次提取流程的核心突破。
前期已经确认游戏使用 Addressables 远程资源加载机制。后续结合运行日志和本地缓存目录中的 catalog hash 文件,确认当前有效资源版本为 0.0.106,并整理出对应的 catalog_0.0.106.json。
catalog 本身不直接保存关卡内容,但会记录资源路径与对应的 bundle 下载地址。拿到 catalog 后,就可以从中解析出 LevelPart分包在 CDN 上的真实下载链接。
也就是说,本地缓存和日志提供了 catalog 版本与资源目录线索,catalog 文件进一步提供了后续批量下载关卡 bundle 所需的 CDN地址。
### 解析 catalog,提取所有关卡分包地址
拿到 catalog 后,继续解析其中的资源记录。
catalog 可以理解为一张资源索引表,里面记录了:
- 资源名称
- 资源类型
- 资源所在分包
- 分包的 CDN 下载地址
通过解析 catalog,找到了三类关卡分包:
- Normal 主线关卡分包;
- DoubleBull 双牛模式关卡分包;
- Block 方块模式关卡分包。
其中主线普通关卡一共有 33 个 LevelPart 分包。
![图片](../feishu-images/FYKlwX7D5ibbmSkaVMucgKAWnOe_Wup7bfMiMoMg.png)
![图片](../feishu-images/FYKlwX7D5ibbmSkaVMucgKAWnOe_KvsEbWCU0oLm.png)
### 批量下载 CDN 上的关卡分包
解析出所有 bundle 地址后,就可以按 catalog 中记录的 CDN 链接批量下载关卡分包。
最终下载到三组资源:
- 主线关卡:LevelPart01.bundle ~ LevelPart33.bundle
- 双牛关卡:DoubleBull01.bundle ~ DoubleBull09.bundle
- 方块关卡:Block01.bundle ~ Block03.bundle
这些 .bundle 文件可以理解为 Unity 打包后的资源箱,里面还不是直接可读的关卡文本,需要继续解包。
### 解包 bundle,提取关卡文本
下载下来的 bundle 继续使用 Unity 资源解析工具进行解包。
解包后,从里面提取出真正的关卡文本,并保存为json文件。
到这一步,关卡数据已经从“远程 Unity 资源包”变成了可以直接分析的文本数据。
![图片](../feishu-images/FYKlwX7D5ibbmSkaVMucgKAWnOe_TCzibaEJforu.png)
![图片](../feishu-images/FYKlwX7D5ibbmSkaVMucgKAWnOe_OQX6by98roSa.png)
![图片](../feishu-images/FYKlwX7D5ibbmSkaVMucgKAWnOe_PctUb0bbKocF.png)
![图片](../feishu-images/FYKlwX7D5ibbmSkaVMucgKAWnOe_YRdebaNkHoqs.png)
### 对比 ResourceId,确认数据完整
提取出文本后,还需要确认数据是否完整。
游戏中每个关卡都有一个 ResourceId,可以理解为关卡的唯一编号。
通过对比主包中的映射表和提取出的分包文本,确认这些关卡编号能够对应上。
最终确认:
> [嵌入电子表格: H9qosRTUMhbxf4toGVpc...]
总计 **4452 关独立关卡数据**。
![图片](../feishu-images/FYKlwX7D5ibbmSkaVMucgKAWnOe_It2pbP7Jboxi.png)
# 三.AI游戏开发交流会相关收获
## 明确 AI 的使用边界
本次交流中,一个比较核心的启发是:AI 更适合承担“讨论、生成、启发、辅助分析”这类不确定性较高的工作,而不适合直接负责强确定性的执行环节。
例如在配表问题中,AI 可以帮助讨论数值节奏、字段结构、关卡难度曲线等设计思路,但如果直接让 AI 批量填写具体数值,就容易出现漏填、错填、跳号等问题,而且这种错误往往不容易被肉眼发现。
这和我之前使用 AI 生成关卡、生成 UI 资源时遇到的问题有相似之处:AI 的结果有时看起来是对的,但如果没有校验机制,就很难判断它是否真正可用。
因此后续使用 AI 时,需要更加明确区分:
- 创意和方案讨论可以交给 AI 辅助;
- 精确计算、批量填充、资源切分、数据校验等环节,应优先交给脚本或确定性工具;
- AI 输出的内容必须经过人工理解和规则校验,不能只看表面效果。
这点对后续关卡配置、资源批处理、数值表整理都有较强参考意义。
## AI 生成风格要先验证可复现性
本次交流中另一个重要启发是:**AI 生成出来一张好看的图,并不等于这个风格可以用于项目。对于游戏 UI 来说,真正重要的是稳定复现能力。**
之前在项目美术探索中也遇到过类似问题:某一次生成的角色或界面效果很好,但后续继续生成按钮、弹窗、图标、棋盘格时,很难保持同样风格。如果风格不可复现,后续资产越多,维护成本越高。
因此后续确认美术风格时,不能只看单张效果图,而应该增加一个验证步骤:
- 先生成 2-3 个核心界面或核心组件;
- 再生成按钮、弹窗、图标、棋盘格等不同类型资产;
- 连续多次测试风格是否稳定;
- 如果风格波动很大,即使第一张效果很好,也要谨慎采用。
这对当前项目后续继续补充 UI 资产、活动弹窗、商店界面、皮肤界面等内容都有帮助。相比追求单张图惊艳,更应该选择 AI 稳定擅长、可持续批量产出的风格方向。
## 云存档和服务端可以先按“弱联网”思路评估
关于存档和云服务的讨论,也解决了我之前的一个疑问:当前项目是单机小游戏,是否需要现在就接入云存档。
这次交流后,我的理解是:是否需要服务端,主要取决于两个问题:
- 是否需要跨设备保留数据;
- 是否需要防作弊或服务端校验。
如果只是单机体验,短期可以继续本地存档。但如果后续涉及账号数据、体力、道具、签到、皮肤、付费、排行榜等内容,就需要考虑至少做弱联网方案。
现阶段比较适合的思路是:
- 本地存档继续作为基础;
- 关键数据预留云端同步结构;
- 体力、道具、皮肤等可在后续做云端备份;
- 涉及支付、排行榜、防作弊时再引入更完整的服务端校验;
- 存档迁移时允许玩家在本地和云端之间选择。
这对后续项目规划有帮助。短期不一定马上接入完整服务端,但需要在存档结构设计时预留扩展空间,避免后面重构成本过高。