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