Files
unity/Docs/Design/Settings.md

4.1 KiB
Raw Permalink Blame History

游戏设置

主页和暂停菜单共用设置界面,提供总音量、画质、分辨率、窗口/全屏、鼠标灵敏度、精瞄倍率以及键鼠改绑。界面沿用现有 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,与原有存档和本地化测试一起执行。