Files
BlueRoseNote/07-Other/AI/AI Agent/UnrealEngine/UnrealEngine Hardness Game Development.md

223 lines
11 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.
# 目录结构
- docs
- Netease_AITA_AssetMaker.md项目技术、设计细节入口文档方便Agent来寻找
-
- ProjectsUE工程目录。
# 相关技术与容器
- ***[真正帮你省token的11个Claude Code技巧每天在用](https://www.bilibili.com/video/BV1YkQ4BFEr8/?share_source=copy_web&vd_source=fe](https://www.bilibili.com/video/BV1YkQ4BFEr8/?share_source=copy_web&vd_source=fe142e8e12816535feaeabd6f6cdc8e)***
- UE
- UnrealMcp
- Puerts
- Puerts Editor
- **uecli**
- Readme的材质都是agent调用uecli做的 帮我生产材质 排版材质节点 帮我场景截图,帮我材质蓝图截图 帮我写readme 帮我提交仓库。 https://github.com/wlxklyh/UECLI
- **通过蓝图转c++功能让AI读懂蓝图**
- Debug
- 雷火MCP**IDE Debug MCP**
- https://km.netease.com/v4/section/aigc/detail/blog/263683
- cpp-debugger-cli
- 互娱
- **从 ASAN 到 AI 的“接力排查”** https://km.netease.com/v4/detail/blog/256465
- **1. 借助 ASAN 把“指针变野”的时间点钉住** [[UE5编辑器开启ASAN]]
- 第一步是启用 ASANAddressSanitizer来辅助定位
- 在 UE5 编辑器环境启用 ASAN本身需要做一些额外工作[https://km.netease.com/v4/detail/blog/254722](https://km.netease.com/v4/detail/blog/254722)
- 这些环境搭建细节本文不展开只强调结论ASAN 成功启用,可以看到完整的分配 / 释放栈。
- https://km.netease.com/v4/detail/blog/260127
- [RiderDebugMcp](http://git-internal.nie.netease.com/mcpanalyzer/RiderDebugMcp)
- [VSDebugMCP](http://git-internal.nie.netease.com/mcpanalyzer/VSDebugMCP)
- [UnrealMCP](http://git-internal.nie.netease.com/mcpanalyzer/UnrealMCP)
- [ue-reference-diagnostic-mcp](http://git-internal.nie.netease.com/mcpanalyzer/ue-reference-diagnostic-mcp)
- VSCode MCP & Plugin
- https://github.com/juehang/vscode-mcp-server
- **`@modelcontextprotocol/server-dap` (DAP MCP)** **用途**:如前所述,这是 AI 进行代码调试的“圣杯”。***它允许大模型直接通过标准 DAP 协议连接到本地的 Python、C++ (GDB/LLDB)、Node.js 调试进程***。
- VSCode插件开发参考 https://github.com/RooCodeInc/Roo-Code 以及以上插件实现一个调试MCP桥接插件。
- Gemini 讨论方案 https://gemini.google.com/app/566ad29e1c699c65
- LLDB MCP https://lldb.llvm.org/use/mcp.html
- Skill
- 108.6K Star https://skills.sh/shubhamsaboo/awesome-llm-apps/debugger
- 其他仓库
- https://github.com/akiselev/debugger-cli
- UI设计
- [开源平替的 Claude Design。](https://mp.weixin.qq.com/s/cKFkP7vXTwC1FZ2k2LHFXA)
- [[#知识图谱]]
- [[Graphify 知识图谱]]
- [[GitNexus 知识图谱]]
- Docker
- Gitea工单以及版本管理。
- ~~OpenClaw子节点部署通过父节点进行控制。~~
- SMB服务。
- UI
- 【能生成游戏UI的Skill更新了^_^Figma支持更好了】 https://www.bilibili.com/video/BV1ro9vBzEY2/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
- Obsidian Cli文档管理。
需要搬运的:
1. [ ] Myself
1. [ ] RPGGameplayAbility
2. [ ] [RiderDebugMcp](http://git-internal.nie.netease.com/mcpanalyzer/RiderDebugMcp)
3. [ ] [VSDebugMCP](http://git-internal.nie.netease.com/mcpanalyzer/VSDebugMCP)
4. [ ] [UnrealMCP](http://git-internal.nie.netease.com/mcpanalyzer/UnrealMCP)
5. [ ] [ue-reference-diagnostic-mcp](http://git-internal.nie.netease.com/mcpanalyzer/ue-reference-diagnostic-mcp)
6. [ ] AssetMaker
7. [ ] Artlib
# 测试
## UE测试技术
- 可视化日志
- 自动测试框架
# 知识图谱
| 工具 | 层级 | 职责 | 技术 |
|------|------|------|------|
| **Graphify** | 宏观语义层 | 设计文档、模块架构、策划案、跨文件概念关系 | LLM 语义提取 + AST |
| **GitNexus** | 微观符号层 | C++ 类继承、函数调用链、符号精确定位 | Tree-sitter AST无 LLM 成本) |
- **Graphify 不适合索引 UE 引擎源码**:引擎源码(`Engine/Source`)数百万行 C++ + 海量宏(`UCLASS()``GENERATED_BODY()`Graphify 的 LLM 语义提取会极其昂贵且不精确。**引擎源码唯一指定 GitNexus。**
- **GitNexus 不适合设计文档**GitNexus 基于 Tree-sitter 解析代码 AST不处理 Markdown/策划文档的语义关系。**设计文档唯一指定 Graphify。**
## 实际配置方案
### Step 1GitNexus 索引 UE 引擎源码(一次性)
```bash
cd D:\UnrealEngine\UE_5.7\Engine\Source
npx gitnexus analyze --skip-agents-md --skip-skills --skip-git
```
- `--skip-agents-md`:避免在引擎目录生成 CLAUDE.md
- `--skip-git`:引擎目录可能不是独立 git 仓库
- 引擎代码是静态的,索引一次即可,无需日常更新
- GitNexus MCP 会**自动发现**新索引的仓库(单实例服务所有仓库)
### Step 2Graphify 索引项目业务层
```bash
# 1. 创建 .graphifyignore排除引擎、编译产物、第三方插件
# 2. 构建知识图谱
/graphify . --directed --no-viz
```
`.graphifyignore` 关键排除项:
```gitignore
# UE 编译产物
Binaries/
Intermediate/
Saved/
DerivedDataCache/
Build/
# UE 配置和资产(非代码)
Config/
Content/
# 第三方插件
Plugins/LogicDriver/
Plugins/UnrealImGui/
# ... 等
# AI 工具配置(非项目内容)
.kilocode/
.trae/skills/
.trae/plans/
```
保留的索引目标:
- `Source/`:项目 C++ 业务代码
- `Plugins/CelpecTalent/``Plugins/RPGGameCore/` 等:项目自有插件
- `.trae/documents/``.trae/specs/`:设计文档和规范
### Step 3CLAUDE.md 路由规则
```markdown
## Architecture-Aware Routing
1. 理解业务意图 → Graphifygraphify-out/graph.json
2. 精确符号查询 → GitNexus AIDM 仓库
3. 引擎底层 API → GitNexus UE Engine 仓库
4. 设计文档/规范 → Graphify 社区标注
```
### MCP 配置说明
**不需要修改 MCP 配置。** GitNexus MCP 是单实例多仓库架构:
```
现有 MCP 实例gitnexus
├── AIDM项目代码59K symbols
├── UE_5.7(引擎源码,索引中)
└── 其他已索引仓库
```
通过 `repo` 参数区分目标:
- 查项目代码:`gitnexus_context({name: “URPGAttributeComponent”, repo: “AIDM”})`
- 查引擎源码:`gitnexus_context({name: “AActor”, repo: “UE_5.7”})`
## 实施计划
### 阶段 1功能规划期 (Planning)
**任务**:新增一个技能释放组件,调用 C++ 底层属性系统AttributeSet
**流程**
1. 调用 Graphify 查询 `graphify-out/graph.json`,了解现有技能系统与属性系统的模块关系
2. 调用 `gitnexus_context({name: “URPGAttributeSet”, repo: “AIDM”})` 获取属性系统的继承拓扑
3. 调用 `gitnexus_impact({target: “URPGAttributeSet”, direction: “upstream”, repo: “AIDM”})` 评估修改影响范围
4. Graphify 高亮相关设计文档(`.trae/specs/ARPGGameDevelopment/`
**结果**CC 在未加载具体 C++ 实现代码的前提下完成方案规划Token 消耗极低。
### 阶段 2编写代码期 (Coding)
**任务**:在 C++ 中实现绑定逻辑,调用引擎定时器 `FTimerManager`
**流程**
1. 调用 `gitnexus_context({name: “FTimerManager”, repo: “UE_5.7”})` 获取引擎侧精准函数签名
2. 调用 `gitnexus_query({query: “timer set timer”, repo: “UE_5.7”})` 查找引擎中定时器的执行流
3. Graphify 确认修改不违反项目架构约束(`.trae/documents/02_程序架构/开发规范.md`
**结果**CC 写出的代码精准匹配引擎 API避免盲猜宏和重载。
### 阶段 3调试 Bug 期 (Debugging)
**任务**C++ 接口在 TS 调用时崩溃。
**流程**
1. CC 获取调用栈,将崩溃符号输入 GitNexus
2. `gitnexus_context` 逆向追踪调用链Caller/Callee
3. `gitnexus_impact` 列出所有受影响执行流
4. Graphify 检查是否有相关设计文档记录了已知限制或迁移计划
**结果**通过图谱边Edges直接定位 Bug 核心链路,无需人工复制几千行生命周期管理代码。
# Debug
## LLDB
#### 1. 安装与环境配置
首先,你需要确保本地安装了 LLDB并为 Claude Code 配置 MCP 服务。
- **方案 A使用官方/社区 LLDB-MCP (推荐)** 在终端中运行以下命令添加 MCP 调试服务:
```
# 使用 uvx 或 npx 自动安装并运行 lldb-mcp-server
claude mcp add lldb-debugger -- command "uvx" --args "lldb-mcp-server"
```
可能是https://github.com/stass/lldb-mcp
- **方案 B开启 LLDB 2026 原生 MCP 支持** 现代版本的 LLDBv19+)已内置 MCP 协议支持。你可以在项目目录下启动它:
```
lldb --protocol-server start --port 59999
```
#### 2. 安装调试“技能” (Skill)
为了让 Claude 具备系统化的调试思维(而不只是乱试命令),你需要从 **Skills.sh** 或 GitHub 安装技能包:
```
# 安装通用的调试技能包
claude skill install AlmogBaku/debug-skill
```
## VSCode
这的确是一个非常典型的架构差异问题。你提到通过 COM (Component Object Model) 接口控制 Visual Studio这非常精准因为 VS 的底层重度依赖 Windows 的 COM 组件机制(如 DTE 对象)。
但对于 **VS Code** 来说情况完全不同。VS Code 是基于 Electron 和 Node.js/TypeScript 构建的,**它根本没有 COM 接口**。
要让 MCP (Model Context Protocol) 或者外部 AI Agent 控制 VS Code特别是进行断点调试社区目前有几套非常成熟的开源方案和设计思路
---
### 一、 VS Code 的 MCP 控制方案
针对 VS Code 的架构,目前主要有三种主流的控制路径:
#### 1. “由内向外”方案Agent 直接作为 VS Code 插件 (目前最稳定、最主流)
与其让外部的 MCP 服务去“黑客”般地控制 VS Code不如**让 Agent 直接运行在 VS Code 内部**。
- **原理**:像 **Cline**、**Roo Code** 这样的插件,它们本身就拥有完整的 VS Code Extension API 权限(可以打开文件、打断点、读取控制台)。
- **MCP 的角色**在这种架构下VS Code 插件作为 **MCP Client**,它去连接外部的 MCP Server比如获取特定的代码分析工具、数据库查询权限等而不是让 MCP 来控制 VS Code。
#### 2. DAP-MCP 桥接方案 (专门针对断点调试)
VS Code 所有的调试能力都是基于 **DAP (Debug Adapter Protocol)** 构建的。如果你想让一个外部的 Agent比如你终端里的 Claude Code控制 VS Code 的调试器,最好的办法是拦截或桥接 DAP。
- **原理**:启动一个 `mcp-server-dap`。这个 MCP 服务把 Agent 发出的 MCP 指令(如“继续执行”、“查看变量”)翻译成标准的 DAP 协议,直接发给 VS Code 底层的 Debug Adapter比如 `cppdbg``lldb-dap`)。
- **效果**AI 不需要点击 VS Code 的 UI 按钮,它直接和 VS Code 背后那个真正负责调试的引擎对话。
#### 3. “由外向内”方案WebSocket / RPC 桥接插件
如果你的 Agent 必须在外部运行,且需要控制 VS Code 的 UI比如让编辑器滚动、高亮某一行代码
- **原理**:需要在 VS Code 里安装一个**暴露 WebSocket 或 HTTP 接口的桥接插件**。外部的 MCP Server 通过向这个本地端口发送 JSON-RPC 指令,插件再调用 VS Code API 来执行操作。