Files
ichni_Official/docs/ichni-official-creatorstudio-technical-map.md
2026-07-08 04:29:20 -04:00

395 lines
14 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.
# ichni Official / IchniCreatorStudio 技术对照文档
生成日期2026-07-08
本文档记录 `ichni Official``IchniCreatorStudio` 的当前结构、同步关系和关键技术差异,供后续任务开始前快速参考。本文档基于本地仓库扫描结果,不代表所有运行时行为已经通过 Unity Editor 实机验证。
## 1. 工作区与权限
| 项目 | 路径 | 当前角色 | 当前写入状态 |
| --- | --- | --- | --- |
| `ichni Official` | `D:\Projects\ichni Official` | 游戏本体 | 可读写 |
| `IchniCreatorStudio` | `D:\Projects\IchniCreatorStudio` | 关卡编辑器 / 内容制作工具 | 可读写 |
已完成的权限验证:
- `D:\Projects\IchniCreatorStudio` 已加入当前 Codex workspace writable roots。
- 已在 `D:\Projects\IchniCreatorStudio\.codex-write-test.tmp` 执行创建、读取、删除测试。
- 测试结果:`WRITE_RETEST_OK: codex write retest 2026-07-08`
## 2. 统一工作标准
后续所有工作继续遵循 `D:\Projects\ichni Official\AGENTS.md` 中记录的标准:
- 两个项目遵循统一编码规范。
- 文档和共享资源应供所有工作区成员查阅。
- `_BM` 后缀类是序列化存档类,本文档称为 `BM` 类。
- 新增或修改继承自 `BaseElement` 的游戏元素时,应优先同步检查两个项目。
- `ichni Official` 使用 `Wwise 2024.1.9.8920`
- `IchniCreatorStudio` 使用 Unity 原生音频。
- `ichni Official` 使用 `Yarn Spinner`,允许修改和扩展。
- 回复用户使用简体中文代码、API、类名、路径和特殊术语保留英文。
## 3. Unity 与 Package 基线
两个项目当前 Unity 版本一致,项目文件实际记录为:
- `6000.3.7f1 (696ec25a53d1)`
共同关键 packages
- `com.unity.inputsystem@1.18.0`
- `com.unity.render-pipelines.universal@17.3.0`
- `com.unity.timeline@1.8.10`
- `com.unity.test-framework@1.6.0`
- `com.unity.ugui@2.0.0`
- `com.unity.visualscripting@1.9.9`
- `com.unity.collections@2.6.2`
`ichni Official` 扫描到的 package
- `com.taptap.sdk.core@4.10.4`
- `com.taptap.sdk.login@4.10.4`
- `com.unity.burst@1.8.27`
- `com.unity.localization@1.5.12`
- `com.unity.nuget.newtonsoft-json@3.2.1`
`IchniCreatorStudio` 扫描到的 package
- `com.unity.burst@1.8.29`
- `com.unity.ide.vscode@1.2.5`
- `com.unity.memoryprofiler@1.1.9`
注意:两个项目的 `Burst` patch 版本不同。除非确实需要统一,否则不要为了版本一致性单独改 package。
## 4. 顶层结构对照
`ichni Official` 关键结构:
- `Assets/Scripts/DataCore`
- `Assets/Scripts/Game`
- `Assets/Scripts/GameUI`
- `Assets/Scripts/Generated`
- `Assets/Scripts/Manager`
- `Assets/Scripts/Menu`
- `Assets/Scripts/NewStorySystem`
- `Assets/Scripts/Online`
- `Assets/Scripts/Saving`
- `Assets/Scripts/Settings`
- `Assets/Scripts/SLSUtilities`
- `Assets/Story`
- `Assets/Wwise`
- `ichni Official_WwiseProject`
`IchniCreatorStudio` 关键结构:
- `Assets/Scripts/CommandSystem`
- `Assets/Scripts/Console`
- `Assets/Scripts/DynamicUI`
- `Assets/Scripts/Editor Tools`
- `Assets/Scripts/Extensions`
- `Assets/Scripts/Game/DataCore`
- `Assets/Scripts/Game/EditorCore`
- `Assets/Scripts/Game/RuntimeCore`
- `Assets/Scripts/Gird`
- `Assets/Scripts/Manager`
- `Assets/Scripts/Settings`
- `Assets/Scripts/SLSUtilities`
- `Assets/Scripts/StartMenu`
- `NodeScript`
脚本数量快照:
| 项目 | `Assets/Scripts` C# | BM C# | Runtime / Game 核心 C# |
| --- | ---: | ---: | ---: |
| `ichni Official` | 340 | 83 | `Assets/Scripts/Game`: 102 |
| `IchniCreatorStudio` | 401 | 87 | `Assets/Scripts/Game/RuntimeCore`: 108 |
## 5. 核心架构差异
### 5.1 游戏本体
`ichni Official` 的核心运行入口集中在:
- `Assets/Scripts/Manager/GameManager.cs`
- `Assets/Scripts/Manager/ProjectLoader.cs`
- `Assets/Scripts/Game`
- `Assets/Scripts/DataCore`
- `Assets/Scripts/NewStorySystem`
它更偏向最终运行时:
- 加载打包或导出的项目数据。
- 使用 `Wwise` 播放音乐和音效。
- 执行关卡、判定、镜头、视觉元素、故事和存档。
- 使用 `Yarn Spinner` 驱动剧情。
- 包含线上、登录、设置、解锁、剧情存档等玩家侧系统。
### 5.2 编辑器
`IchniCreatorStudio` 的核心编辑入口集中在:
- `Assets/Scripts/Manager/EditorManager.cs`
- `Assets/Scripts/Manager/ProjectManager.cs`
- `Assets/Scripts/Game/RuntimeCore`
- `Assets/Scripts/Game/DataCore`
- `Assets/Scripts/Game/EditorCore`
它更偏向内容制作和导出:
- 管理工程文件、歌曲文件、谱面、命令脚本。
- 在编辑器内复用大量 runtime 元素。
- 每个可编辑元素通常还需要配套 `EditorCore` 脚本。
- 使用 Unity 原生 `AudioSource` 和动态音频加载。
- 导出给 `ichni Official` 使用的压缩加密 `BM` 数据。
## 6. BM 与 BaseElement 同步关系
### 6.1 BM 覆盖情况
当前 BM 文件名对照结果:
- `ichni Official` BM 文件名数量100
- `IchniCreatorStudio` BM 文件名数量105
- `ichni Official` 中存在但 `IchniCreatorStudio` 中缺失0
- `IchniCreatorStudio` 中存在但 `ichni Official` 中缺失5
`IchniCreatorStudio` 额外存在的 BM
- `Custom2DShape_BM.cs`
- `DisplacementTracker_BM.cs`
- `ScaleTracker_BM.cs`
- `SwirlTracker_BM.cs`
- `Vector3Interferometer_BM.cs`
共同 BM 文件中,只有少数内容完全一致,大多数同名 BM 在两个项目中存在实现差异。这是正常现象,因为编辑器侧需要保存、复制、编辑器行为或导出行为,游戏本体侧需要执行和运行时加载。
重要规则:不要因为同名就直接覆盖 BM 文件。任何 BM 同步都应逐个比较字段、`ExecuteBM()``AfterExecute()``SaveBM()``DuplicateBM()` 和导出兼容性。
### 6.2 BaseElement 差异
`ichni Official`
- `Assets/Scripts/Game/Base/BaseElement.cs`
- `IBaseElement` 包含 `matchedBM``Refresh()``OnDelete()``Delete()``SetUpInspector()`
- `Assets/Scripts/Game/GameElements/Essential/GameElement.cs` 更偏运行时生命周期。
`IchniCreatorStudio`
- `Assets/Scripts/Game/RuntimeCore/Base/BaseElement.cs`
- `IBaseElement` 在运行时接口基础上额外包含 `SaveBM()`
- `Assets/Scripts/Game/RuntimeCore/GameElements/Essential/GameElement.cs` 额外有 `SetEditorSubmodules()`
- `Assets/Scripts/Game/DataCore/Base_BM/GameElement_BM.cs` 额外包含 `DuplicateBM(GameElement attached)`
新增 `BaseElement` 派生元素时,通常需要同时考虑:
- Official runtime script
- Official `BM` script
- Creator `RuntimeCore` script
- Creator `DataCore` / `BM` script
- Creator `EditorCore` inspector 或编辑交互脚本
- 主题包内对应 runtime、data、editor 三侧脚本
## 7. 存档、加载与导出
### 7.1 Official 加载
关键文件:
- `D:\Projects\ichni Official\Assets\Scripts\Manager\ProjectLoader.cs`
当前扫描到的核心设置:
- `SaveSettings`: `compressionType=None`, `encryptionType=None`, `format=JSON`, `location=Resources`
- `LoadSettings`: `compressionType=Gzip`, `encryptionType=AES`, `format=JSON`, `location=Resources`
主要加载对象:
- `ProjectInformation_BM`
- `SongInformation_BM`
- `BeatmapContainer_BM`
- `CommandScripts_BM`
加载后通过 `ExecuteBM()` 生成运行时对象。
### 7.2 Creator 保存与导出
关键文件:
- `D:\Projects\IchniCreatorStudio\Assets\Scripts\Manager\ProjectManager.cs`
当前扫描到的核心设置:
- `SaveSettings`: `compressionType=None`, `encryptionType=None`, `format=JSON`
- `ExportSettings`: `compressionType=Gzip`, `encryptionType=AES`, `format=JSON`
导出流程通常会:
- 调用 `SaveBM()`
- 写出 `ProjectInformation`
- 写出 `SongInformation`
- 写出 `Beatmap`
- 写出 `CommandScripts`
这说明 `IchniCreatorStudio` 是 Official 可加载资源的重要源头。改动序列化字段时,必须同时确认保存、导出和 Official 加载链路。
## 8. 音频系统差异
### 8.1 Official: Wwise
Official 使用:
- `Assets/Wwise`
- `ichni Official_WwiseProject`
- `Assets/Scripts/Manager/SongPlayer.cs`
- `Assets/Scripts/SLSUtilities/WwiseAssistance/AudioManager.cs`
Wwise 版本:
- Wwise SDK `2024.1.9 Build 8920`
- Unity Integration Bundle `2024.1.9.3788`
Official 音频特点:
- 使用 `AK.Wwise.Event``RTPC``AkUnitySoundEngine`
- `SongPlayer` 通过 Wwise event 播放音乐,并读取 segment position。
- `LowPassFilterEffect` / `HighPassFilterEffect` 通过 Wwise RTPC 控制滤波效果。
- 音频事件、RTPC、bank 和 Unity 侧引用需要保持一致。
### 8.2 Creator: Unity Native Audio
Creator 使用:
- `Assets/Scripts/Manager/MusicPlayer.cs`
- `Assets/Scripts/Manager/EditorManager.cs`
- `Assets/Scripts/Game/RuntimeCore/Base/ProjectFiles/SongInformation.cs`
- `Assets/Scripts/Game/RuntimeCore/Base/ProjectFiles/NoteAudioCollection.cs`
Creator 音频特点:
- 使用 `AudioSource``AudioClip``AudioMixerGroup`
- `SongInformation` 负责加载音频文件。
- 包含自定义 `LoadMP3``LoadWav` 流程。
- `MusicPlayer` 实现 `ISongTimeProvider`,供编辑器时间轴使用。
音频相关游戏元素或效果不能直接从 Official 复制到 Creator。Official 侧通常要接 WwiseCreator 侧通常要接 Unity 原生音频和编辑器预览。
## 9. 剧情系统
`ichni Official` 使用 `Yarn Spinner`,主要集中在:
- `D:\Projects\ichni Official\Assets\Story`
- `D:\Projects\ichni Official\Assets\Scripts\NewStorySystem`
已扫描到的关键文件:
- `Assets/Story/Chapter0/Chapter0.yarnproject`
- `Assets/Story/Chapter0/C0_A0.yarn`
- `Assets/Story/Chapter0/StoryData_Chapter0.asset`
- `Assets/Story/Chapter0/CharacterRegistry.asset`
- `Assets/Scripts/NewStorySystem/StoryDialogueController.cs`
- `Assets/Scripts/NewStorySystem/YarnFunctions/VariableFunctions.cs`
- `Assets/Scripts/NewStorySystem/YarnFunctions/StoryTreeCommands.cs`
- `Assets/Scripts/NewStorySystem/YarnFunctions/PortraitCommands.cs`
当前 `Chapter0.yarnproject` 关键信息:
- `projectFileVersion`: 4
- `sourceFiles`: `**/*.yarn`
- `baseLanguage`: `en`
- 已配置 `zh-CN` localisation
- 当前 editor options 中可见角色:`SLS``Asahi`
`IchniCreatorStudio` 当前没有扫描到对应 Yarn 资源。剧情系统修改一般只影响 Official除非未来编辑器需要制作剧情内容。
## 10. ThemeBundle 与元素扩展
两个项目都包含主题包结构,例如:
- `Basic`
- `DepartureToMultiverse`
- `MetropolisOnOrbit`
- `Shapes`
主题包脚本通常按职责拆分:
- Official: runtime + data/BM
- Creator: runtime + data/BM + editor
示例:
- Official `DepartureToMultiverse` 包含 `DTMTrail.cs``DTMStarrySkybox.cs``DTMRandomGridFloor.cs` 等 runtime 脚本,以及对应 `*_BM.cs`
- Creator `DepartureToMultiverse` 除 runtime 和 `*_BM.cs` 外,还包含 `DTMTrail_Editor.cs``DTMStarrySkybox_Editor.cs``DTMRandomGridFloor_Editor.cs` 等编辑器脚本。
- Creator `Basic` 中存在 `Custom2DShape_BM.cs``Custom2DShape_Editor.cs`,但 Official 当前没有同名 BM 文件。
新增主题包元素时,应先找同主题下已有元素作为模板,再分别实现 Official runtime/BM 与 Creator runtime/BM/editor。
## 11. 当前同步风险与注意事项
1. BM 文件名高度重合,但内容大多不一致。
- 不能机械同步。
- 字段变更必须评估导出兼容性和旧数据加载。
2. Creator 覆盖了所有 Official BM 文件名,并多出 5 个 BM。
- 如果 Official 后续需要加载这些 Creator-only 元素Official 需要新增对应 runtime/BM 支持。
3. Official 与 Creator 的音频系统不同。
- Official: `Wwise`
- Creator: Unity native audio
- 音频效果和播放逻辑必须双实现或抽象到共同时间接口。
4. Official 有剧情系统Creator 当前没有。
- 修改 `Yarn Spinner``NewStorySystem` 前不应假设 Creator 有对应编辑器支持。
5. Creator 有 `EditorCore`Official 没有。
- 元素编辑能力通常不能只靠 runtime/BM 实现。
6. 当前两个仓库均存在工作区未提交或未跟踪文件。
- 后续修改前应先检查 `git status`
- 不要还原或覆盖用户已有改动。
## 12. 后续任务检查清单
修改或新增 `BaseElement` / 游戏元素时:
- 检查 Official runtime 脚本。
- 检查 Official `BM` 脚本。
- 检查 Creator `RuntimeCore` 脚本。
- 检查 Creator `DataCore` / `BM` 脚本。
- 检查 Creator `EditorCore` 脚本。
- 检查主题包内是否有同类元素模板。
- 检查 `SaveBM()``ExecuteBM()``AfterExecute()``DuplicateBM()`
- 检查旧数据加载和导出兼容性。
- 如果涉及音频,分别实现 Wwise 侧和 Unity native audio 侧。
- 如果涉及剧情,只默认影响 Official除非明确要求 Creator 支持剧情编辑。
修改 BM 字段时:
- 确认字段默认值。
- 确认序列化名称和旧文件兼容性。
- 确认 Creator 保存和导出。
- 确认 Official 加载和执行。
- 尽量准备一个最小导出样例进行回归验证。
修改 package、Unity 版本或项目设置时:
- 不要只改一个项目,除非差异有明确原因。
- 先确认 `Packages/manifest.json``ProjectSettings/ProjectVersion.txt`
- 记录差异原因。
## 13. 关键文件索引
| 主题 | Official | Creator |
| --- | --- | --- |
| 工作标准 | `D:\Projects\ichni Official\AGENTS.md` | `D:\Projects\IchniCreatorStudio\AGENTS.md` |
| Unity 版本 | `D:\Projects\ichni Official\ProjectSettings\ProjectVersion.txt` | `D:\Projects\IchniCreatorStudio\ProjectSettings\ProjectVersion.txt` |
| Packages | `D:\Projects\ichni Official\Packages\manifest.json` | `D:\Projects\IchniCreatorStudio\Packages\manifest.json` |
| Runtime elements | `D:\Projects\ichni Official\Assets\Scripts\Game` | `D:\Projects\IchniCreatorStudio\Assets\Scripts\Game\RuntimeCore` |
| BM data | `D:\Projects\ichni Official\Assets\Scripts\DataCore` | `D:\Projects\IchniCreatorStudio\Assets\Scripts\Game\DataCore` |
| Editor scripts | 无统一 `EditorCore` | `D:\Projects\IchniCreatorStudio\Assets\Scripts\Game\EditorCore` |
| Official loader | `D:\Projects\ichni Official\Assets\Scripts\Manager\ProjectLoader.cs` | 不适用 |
| Creator save/export | 不适用 | `D:\Projects\IchniCreatorStudio\Assets\Scripts\Manager\ProjectManager.cs` |
| Official audio | `D:\Projects\ichni Official\Assets\Scripts\Manager\SongPlayer.cs` | 不适用 |
| Creator audio | 不适用 | `D:\Projects\IchniCreatorStudio\Assets\Scripts\Manager\MusicPlayer.cs` |
| Story/Yarn | `D:\Projects\ichni Official\Assets\Scripts\NewStorySystem` | 当前无对应系统 |