关于 hz-unity-project-analyzer
面向 AI Agent 的 Unity 项目分析技能,可生成并维护存放于 `.agent-docs/` 的项目文档。支持全量扫描、增量更新和只读文档检索,覆盖场景、系统、预制件、资源与脚本。
主要功能
- 01生成项目结构与系统文档
- 02记录场景流程和依赖关系
- 03整理预制件、资源及脚本用途
- 04按变更增量更新文档
- 05基于现有文档只读检索
适用场景
- 01首次为 Unity 项目建立文档
- 02代码或资源变更后同步文档
- 03根据文档了解场景与系统
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ meta-quest/ agentic-tools --skill hz-unity-project-analyzer安装后在 Claude Code 中输入/hz-unity-project-analyzer确认已加载。
详细介绍
Unity 项目分析器
分析、记录并维护 Unity 项目结构的动态知识库,以便 AI Agent 理解。输出内容存放在 .agent-docs/ 中,采用适合纳入源代码管理的 Markdown 文件。
运行模式
此技能有四种运行模式。根据上下文判断应使用哪种模式:
模式 1:首次完整扫描
触发条件: .agent-docs/ 目录不存在,或 .agent-docs/index.md 不存在。
模式 2:增量更新
触发条件: 用户要求更新文档,或 AI Agent 已进行结构性更改(新增场景、脚本、预制件或系统)。默认使用此更新模式。
重要提示: 增量更新是实现过程的一部分,而非单独的步骤。创建或修改脚本、预制件或资源时,应在同一轮操作中更新对应的 .agent-docs/ 文件,然后再继续下一项任务。
模式 3:完整重新扫描
触发条件: 用户明确要求完整重新扫描(例如“重新扫描项目”“完整项目分析”)。
模式 4:内容导入
触发条件: 用户询问项目结构,或系统/功能的工作方式(例如“这个项目是做什么的”“球体系统如何工作”“项目结构”“加载项目分析”)。仅当 .agent-docs/ 存在时使用此模式。此模式为只读模式,不要修改文档。
完整扫描(模式 1)和完整重新扫描(模式 3)的说明
第 1 步:收集项目概览
- 阅读
README.md、CHANGELOG.md以及Documentation/文件夹中的所有文档 - 阅读
Packages/manifest.json,了解所有已包含的软件包 - 列出所有场景:
Assets/**/*.unity - 列出所有脚本文件夹和程序集定义:
Assets/**/*.asmdef - 列出所有预制件文件夹:查找包含
.prefab文件的目录 - 从
ProjectSettings/ProjectVersion.txt确认项目使用的 Unity 版本 - 如果可以连接到 Editor(
unity status --format json显示状态为ready),请实时检查,以获取仅凭文件无法获得的更多信息 — 使用unity command get_scene_hierarchy、find_assets、package_list --scope installed和get_*_settings命令(get_player_settings、get_quality_settings、get_graphics_settings)。请参阅unity-cli技能。 - 如果连接了头显,记录测试设备基准信息 — 使用
metavr device list和metavr device info <id>(操作系统版本、设备形态),以便后续发现结果注明观察所用的硬件。
第 2 步:提出澄清问题
记录文档之前,询问用户任何仅凭代码或文档无法明确判断的内容。例如:
- “我看到场景名为 X、Y、Z — 哪个是主入口?”
- “我看到一个名为 [name] 的文件夹,其中的资源用途不明 — 它是做什么的?”
- “我看到有多种网络方案 — 哪一种是主要方案?”
仅针对确实含糊的内容提问。如果从命名、文件夹结构或代码检查中可以明确判断,就直接记录。
第 3 步:分析并记录
对于以下每个类别,创建或更新相应的子文档:
3a. 项目概览(.agent-docs/project-overview.md)
- 项目名称、描述、Unity 版本
- 目标平台
- 高层架构概述
- 关键第三方软件包及其在此项目中的用途(仅作概述,不涉及内部细节)
3b. 场景流程(.agent-docs/scenes/)
为每个场景创建一个文件(例如 .agent-docs/scenes/startup.md)。
每份场景文档应包含:
- 场景在项目中的用途和作用
- 关键 GameObject 及其用途
- 使用了哪些脚本/预制件
- 场景切换(什么内容会加载此场景,此场景会加载什么内容)
- 场景是否属于主运行流程、测试场景或示例
使用 mermaid 在 .agent-docs/scenes/_flow.md 中创建场景流程图:
graph LR
Startup --> MainMenu --> Gameplay
3c. 系统(.agent-docs/systems/)
识别逻辑系统(网络、UI、音频、输入、游戏玩法等),并为每个系统创建一个文件。
对于每份系统文档:
- 用途和职责
- 关键脚本(包含文件路径)及其作用——重点说明如何使用,而不是实现方式
- 系统使用的关键预制件
- 对其他系统的依赖
- 使用相对链接交叉引用相关场景和其他系统文档
3d. 预制件(.agent-docs/prefabs/)
根据内容是否清晰,选择分组记录或逐个记录:
- 如果某个预制件文件夹的用途可通过命名一目了然 → 创建分组文档(例如,
.agent-docs/prefabs/ui-elements.md) - 如果某些预制件的具体用途不明显 → 分别记录(例如,
.agent-docs/prefabs/player-rig.md)
对于每个预制件或分组:
- 用途以及适用场景
- 嵌套预制件层级(记录嵌套预制件和变体)
- 附加的关键组件
- 使用该预制件的场景
- 配置说明(重要的 Inspector 值、必需引用)
3e. 资源(.agent-docs/assets/)
根据实际情况记录非脚本、非预制件资源:
- 材质、着色器、纹理、音频、动画、脚本化对象
- 文件夹命名清晰时进行分组;用途不明显时逐个记录
- 重点说明:资源是什么、用途是什么、使用方式和位置
3f. 脚本参考(.agent-docs/scripts/)
脚本通过代码自我说明。在此仅记录使用情境:
- 按系统或功能领域整理
- 对于每个脚本:说明用途、使用方法,以及所属的预制件或场景
- 不要重复代码或描述实现细节
第 4 步:构建索引
创建或更新 .agent-docs/index.md 作为主入口:
# [Project Name] — Agent Documentation
> Auto-generated project knowledge base for AI agent comprehension.
> Last updated: YYYY-MM-DD
## Quick Context
[2-3 sentence project summary]
## Document Map
- [Project Overview](project-overview.md)
- Scenes
- [Scene Flow](<scenes/_flow.md>)
- [SceneName](<scenes/scene-name.md>)
- ...
- Systems
- [SystemName](<systems/system-name.md>)
- ...
- Prefabs
- [PrefabGroup](<prefabs/group-name.md>)
- ...
- Assets
- [AssetGroup](<assets/group-name.md>)
- ...
- Scripts
- [ScriptArea](<scripts/area-name.md>)
- ...
## Runtime Flow
[Brief description of app lifecycle from launch to gameplay]
第 5 步:创建配置
创建 .agent-docs/_config.md:
---
last_full_scan: YYYY-MM-DD
last_update: YYYY-MM-DD
documented_systems:
- system-name-1
- system-name-2
documented_scenes:
- scene-name-1
- scene-name-2
documented_prefab_groups:
- group-name-1
- group-name-2
---
增量更新说明(模式 2)
- 阅读
.agent-docs/_config.md和.agent-docs/index.md - 确定发生了哪些变化:
- 如果 AI Agent 刚刚进行了更改:只更新受这些更改影响的文档
- 如果用户要求更新:将当前项目状态与文档中记录的状态进行比较
- 检查新增、删除或重命名的场景、脚本和预制件
- 检查
Packages/manifest.json中是否有新增的软件包 - 如有帮助,检查 git status,查看近期修改的文件
- 只更新受影响的子文档
- 清理过时引用: 如果某个脚本、预制件或资源已删除或重命名,请在受影响的文档中删除或更新相关引用。不要留下失效引用。
- 如果新增或删除了文档,请更新
.agent-docs/index.md - 更新
.agent-docs/_config.md中的last_update和已记录列表
不要重写未发生变化的文档。
导入说明(模式 4)
- 检查
.agent-docs/index.md是否存在——如果不存在,则跳过(没有文档可导入) - 阅读
.agent-docs/index.md,获取文档映射和快速上下文 - 根据用户的问题,只阅读与问题相关的子文档。例如:
- “这个项目是做什么的?” → 阅读
project-overview.md - “球体系统是如何运作的?” → 阅读
systems/balls.md - “有哪些场景?” → 阅读
scenes/_flow.md - 一般项目问题 → 阅读
project-overview.md和scenes/_flow.md
- “这个项目是做什么的?” → 阅读
- 不要急于阅读所有子文档——按需阅读,保持上下文聚焦
文档编写指南
- **受众:**优先面向 AI Agent。内容应明确、结构化且无歧义。
- **篇幅:**每份子文档应简洁。优先使用结构化列表,而非段落。每份文档控制在 200 行以内。
- **交叉引用:**仅在文档之间存在实际依赖或关联时,使用相对 Markdown 链接。
- **图示:**如果 Mermaid 图比文字更能清晰说明流程或架构,则使用 Mermaid。文字更清晰时不必使用。
- **第三方包:**记录项目如何使用这些包。不要介绍其内部实现。
- **脚本:**记录用途和用法,而非实现方式。代码本身会说明实现。
- **预制体:**记录嵌套层级。注明重要的 Inspector 配置。
- **源代码管理:**每个文件聚焦一个概念。使用描述性文件名。避免使用大型的单体文档。
- **过时内容:**在每份子文档顶部添加
Last updated: YYYY-MM-DD。这有助于识别可能需要更新的文档。 - 日期:
Last updated字段中仅使用日期,不添加括号注释。
文件命名约定
- 所有文件名均使用小写 kebab-case:
player-controller.md、main-menu.md - 流程/索引文件名前加下划线:
_flow.md、_config.md - 场景/系统名称改用 kebab-case:
Startup.unity→startup.md