feat: 场景

This commit is contained in:
m0_75251201
2025-11-04 17:05:34 +08:00
parent 0206a83f56
commit 5d69efbc3f
84 changed files with 1406 additions and 21 deletions

46
.github/copilot-instructions.md vendored Normal file
View File

@@ -0,0 +1,46 @@
## 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 项”),我会把说明扩展成更精确的操作步骤。