Files

41 lines
4.1 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.
# 游戏设置
主页和暂停菜单共用设置界面,提供总音量、画质、分辨率、窗口/全屏、鼠标灵敏度、精瞄倍率以及键鼠改绑。界面沿用现有 UI Toolkit 和机库配色,文本使用现有本地化目录中的稳定键。
## 职责与依赖
| 类型 | 职责 |
| --- | --- |
| `GameSettingsData` | 独立的设置快照、复制与数值校验;不引用 UI 或游戏进度。 |
| `SettingsStore` | 读取独立的 `settings.json`,临时文件写入后原子替换,保留 `.bak`;写入失败时不替换内存中的已保存快照。 |
| `SettingsService` | 应用声音、画质、显示与灵敏度设置;管理显示预览、确认和恢复。时钟可注入,暂停时按真实时间计时。 |
| `InputBindingService` | 对克隆后的 Input Actions 应用原生 binding overrides;处理采集、冲突校验、取消与释放,不修改输入模板及 GUID。 |
| `SettingsScreen` | 构建设置界面,持有编辑草稿、分页、焦点、状态消息和输入采集弹层;通过服务应用与保存。 |
| `GameHud` / `GameSession` | 负责设置入口、返回原菜单、输入交接与生命周期。`MechPilot` 读取服务中的灵敏度。 |
调用关系为 `GameSession → SettingsService → SettingsStore / InputBindingService`,`GameHud → SettingsScreen → SettingsService`。不引入全局事件总线、服务定位器或额外框架。
## 修改与返回
- 打开界面时复制已保存快照。切换分页和语言保留当前草稿。语言沿用 `GameLocalization` 的即时切换与独立偏好保存。
- 点击应用后保存完整设置。保存失败时显示可重试消息,不将失败状态当作已保存状态。
- 分辨率或显示模式变化先预览,15 秒内确认后保存;超时或取消恢复之前的显示、音量与画质。计时不受暂停影响。
- 返回时放弃尚未应用的修改,并恢复已保存的按键。恢复默认也先进入草稿,需点击应用保存。
- 从暂停菜单进入设置后保持暂停,返回时仍停留在暂停菜单。处理设置输入的帧不会继续触发驾驶、货仓或关闭暂停。
## 按键
16 项可改绑输入包含四个移动方向、主武器、精瞄、推进、跳跃/升空、视角、交互、货仓、回收舱、暂停、副武装、主动防护和换弹。货仓内使用 R 旋转选中的物品,驾驶时换弹读取当前绑定。镜头移动固定使用鼠标位移。
使用 Input System 自带的交互式改绑与 JSON overrides,并用绑定 ID 保持模板兼容。`SettingsInputCapture` 将 UI Toolkit 的键盘和指针事件适配到同一改绑服务,兼容辅助输入和未转发为原始设备事件的输入;两条路径共用冲突检查,且只完成一次。接受实际键盘按键及五个鼠标按钮;重复键、鼠标位移和不支持的设备不覆盖原绑定。Esc 取消采集并保留为菜单返回键。采集期间禁用驾驶动作,完成、取消、失焦和关闭时恢复原有启用状态并释放采集对象。完成采集后同时抑制当前帧和下一帧的菜单输入,避免被采集的按键继续关闭界面。
机库提示、HUD、货舱说明、试验场通知和世界交互提示从当前绑定生成,切换语言后一起刷新。
## 持久化与开发隔离
`settings.json` 使用独立的 `version = 1`,装备进度分别保存在 `profile-v2.json`、`range-v2.json`,两者通过同一数据目录入口隔离。数值载入时检查范围,损坏的主文件尝试从备份恢复。设置文件中的按键覆盖也会校验,避免将镜头向量输入替换成按钮输入。
普通 Windows 玩家沿用原先 `Application.persistentDataPath/Ironspore/` 路径及 `settings.locale` 语言偏好键。Unity 编辑器使用各工程自身的 `UserSettings/Ironspore/`,并按完整路径隔离语言偏好。独立程序测试可传入 `-ironspore-data-path <绝对路径>`,该目录中的设置、进度与语言偏好均独立于正式数据。
界面验证与构建记录归档在 `Docs/QA/Settings/`。设置和改绑测试位于 `Assets/Tests/EditMode/SettingsTests.cs`,与原有存档和本地化测试一起执行。