Files
DuckovMods/.github/copilot-instructions.md
m0_75251201 5d69efbc3f feat: 场景
2025-11-04 17:05:34 +08:00

47 lines
3.8 KiB
Markdown
Raw Permalink 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.

## DuckovMods — agent 快速上手说明
目标:为 AI 编码代理提供立即可用的、本仓库可执行的上下文和约定,便于快速完成修改、补丁与功能实现。
- 仓库概览
- 顶层为多个独立 mod 项目文件夹(例如 `HideCharacter/`, `HitFeedback/`, `SceneSnapshot/`, `Theme/`, `UIFrame/`)。每个模块通常包含一个 `*.csproj``ModBehaviour.cs` 与若干源文件。
- 解决方案文件:`DuckovMods.sln`。README 位于根目录,简短说明了仓库目的。
- 关键约定(必须遵循)
- 每个 mod 通过类 `ModBehaviour` 实现,且继承自 `Duckov.Modding.ModBehaviour`(示例:`Theme/ModBehaviour.cs`)。常用生命周期钩子:`OnAfterSetup()``OnBeforeDeactivate()`
- 模块间互操作通常通过反射和“安全 API 包装器”完成(示例:`HideCharacter/Api/ModConfigApi.cs`)。这些包装器:
- 在运行时用 `AppDomain.CurrentDomain.GetAssemblies()` 扫描目标程序集并反射所需类型/方法;
- 做好异常捕获并返回布尔成功标志或默认值;
- 约定配置键名为 `${modName}_${key}`(见 `SafeLoad`/`SafeSave` 用法)。
- 配置与版本兼容:一些 API 会检查目标 mod 的静态 `VERSION` 字段(例中 `ModConfig.ModBehaviour.VERSION`)。在交互前请优先调用包装器的 `Initialize()`
- 日志使用 UnityEngine 的 `Debug.Log` / `Debug.LogWarning` / `Debug.LogError`
- 构建 / 调试工作流
- 这是一个 .NET 多项目解决方案。常规命令PowerShell
- 构建(调试):`dotnet build d:\vs_project\DuckovMods\DuckovMods.sln`
- 构建(发布):`dotnet build d:\vs_project\DuckovMods\DuckovMods.sln -c Release`
- 注意:部分项目输出见 `bin/Debug/netstandard2.1/``bin/Release/net9.0/`,在修改目标框架或依赖时,请检查对应 `*.csproj``<TargetFramework>`
- 仓库内未发现独立的单元测试项目 —— 若需要添加测试,请在顶层新建 `tests/` 并使用常见测试框架xUnit/NUnit
- 常见开发任务与示例
- 添加新 mod在仓库根添加新文件夹并创建 `YourMod.csproj``ModBehaviour.cs`(继承 `Duckov.Modding.ModBehaviour`),在解决方案中加入 csproj。
- 与 ModConfig 交互:参考 `HideCharacter/Api/ModConfigApi.cs` 的模式,优先编写“安全静态封装”以免反射调用抛出未捕获异常。
- 读取/保存配置:使用 `SafeLoad<T>(modName, key, default)``SafeSave<T>(modName, key, value)`,键名需按 `${modName}_${key}` 规则。
- 代码风格与约定(可自动化检查)
- 命名:模块文件夹以 PascalCase类名以 PascalCase。
- 公共跨 mod API 放在各模块的 `Api/` 子目录(例如 `HideCharacter/Api/`),以降低命名冲突。
- 反射查找尽量包含日志输出以便定位加载顺序问题(本仓库中已有此类日志用法)。
- 易出错点agent 在修改时应特别留意)
- 直接调用其他 mod 的内部类型/方法会因加载顺序或版本不兼容而失败——请优先使用或添加“安全包装器”。
- 修改 TargetFramework 可能导致与 Unity 或已有二进制不兼容。先在本地构建并检查 `bin/` 输出。
- 不要假设存在单元测试;对行为敏感修改请手动验证或添加小型验证脚本。
- 推荐起始文件(优先阅读)
- `Theme/ModBehaviour.cs`mod 生命周期示例)
- `HideCharacter/Api/ModConfigApi.cs`(反射 + 安全包装器范例)
- `UIFrame/UIFrameAPI.cs`(公共 API 占位)
- `DuckovMods.sln` 与根 `README.md`
如果上面有遗漏或需要更详细的“如何运行/调试某个 mod”步骤请指出具体目标例如“在 Unity 中热重载某 mod”或“为 HideCharacter 添加新的 ModConfig 项”),我会把说明扩展成更精确的操作步骤。