输入处理
Naninovel 使用 Unity 的 Input System 来监听以下操作。
| 名称 | 键盘+鼠标 | 游戏手柄 | 描述 |
|---|---|---|---|
| Submit | Enter | Button South | 通用确认操作,例如,接受提示框或提交输入表单。 |
| Cancel | Escape | Button East | 通用拒绝操作,例如,拒绝提示框或退出菜单。 |
| Delete | Delete | Button North | 通用删除操作,例如,删除选定的存档槽。 |
| Navigate | Arrow Keys | D-Pad, Left Stick | 通用导航操作,例如,在一排存档槽之间选择。 |
| Scroll | Page Up/Down | Right Stick | 通用滚动操作,例如,滚动历史记录。 |
| Page | Shift+Left <-> Shift+Right | Left Trigger <-> Right Trigger | 通用翻页操作,例如,在存档/读档菜单中翻页。 |
| Tab | Ctrl+Left <-> Ctrl+Right | Left Bumper <-> Right Bumper | 通用选项卡切换操作,例如,在设置菜单中切换选项卡。 |
| Continue | Enter, Scroll Wheel (Y-) | Button South | 禁用等待输入模式(打印消息时激活)以继续脚本播放。 |
| Pause | Backspace | Start | 显示暂停 UI。 |
| Skip | Ctrl | Button West | 在操作处于激活状态(按住按钮)期间启用 跳过模式(快进)。 |
| ToggleSkip | Tab | Right Stick Press | 切换跳过模式(如果已禁用则持续启用,反之亦然)。 |
| SkipMovie | Escape | Button East | 跳过(取消)当前正在播放的 影片。 |
| AutoPlay | A | Button East | 切换 自动播放模式,在该模式下,等待输入模式会在设定的延迟后自动禁用。 |
| ToggleUI | Space | Button North | 切换整个 UI 层的 可见性(隐藏/显示)。 |
| ShowBacklog | L | Right Bumper | 切换 历史记录 UI 的可见性。 |
| Rollback | B, Scroll Wheel (Y+) | Left Bumper | 将脚本向后倒回。 |
| CameraLook | Mouse Delta | Right Stick | 在 @look 模式下移动摄像机。 |
| ToggleConsole | ` | 切换开发控制台。 | |
| EnterDialogue | Enter, E | Button South, Button West | 激活对话触发器以进入 对话模式。 |
自定义输入
您可以通过在 Naninovel -> Configuration -> Input 编辑器菜单中分配自定义 Input Actions 资产来配置默认操作并添加新操作。将相关操作保留在 Naninovel 映射下,以便引擎检测到它们。默认输入操作资产可以通过 Create -> Naninovel -> Input -> Controls 资产菜单创建——创建自己的资产时可以将其用作参考。
示例
在 库存示例 中可以找到添加自定义输入绑定以切换库存 UI 的示例。具体来说,Scripts/Runtime/Inventory/UI/InventoryUI.cs 运行时脚本中使用了自定义“ToggleInventory”操作。
使用自定义输入操作时,建议在同一配置菜单中同时分配自定义 Event System。然后,在事件系统预制件的 Input System UI Input Module 组件中,将自定义输入操作资产分配给 Actions Asset 属性。这是各种 UI 相关功能正常工作所必需的。您可以通过 Create -> Naninovel -> Input -> Event System 创建适用于 Naninovel 的默认事件系统预制件。
提示
为防止带有修饰键的操作(例如 Tab 和 Page)触发使用相同绑定但不带修饰键的其他操作(例如 Navigate),请在项目设置的 Input System Package 类别下启用 Enable Input Consumption 选项。
适应输入模式
默认情况下,所有内置 UI 将根据最近使用的输入设备适应当前输入模式(鼠标和键盘、游戏手柄或触摸)。例如,如果玩家使用鼠标与游戏交互,但在某个时刻按下了游戏手柄上的按钮,UI 将切换到游戏手柄输入模式。
您可以通过取消选中输入配置菜单中的 Detect Input Mode 选项来禁用该功能。
引擎初始化后激活的默认输入模式由输入管理器根据目标平台确定:
- 游戏主机 -> 游戏手柄
- 移动设备 -> 触摸
- 其他 -> 鼠标
鼠标
在此模式下,UI 将禁用其下所有 Selectable 对象的导航。这是为了防止按钮在被鼠标单击时转换为“选中”状态。
此外,如果在 Custom UI(或派生)组件中分配了 Button Controls 对象,它将被启用,而 Keyboard Controls 和 Gamepad Controls 将被禁用。这样,特定于鼠标输入模式的按钮(例如“关闭”按钮)和按键图例(例如游戏手柄按钮标签)就只会在关联的输入模式处于活动状态时可见。
游戏手柄
游戏手柄模式将重新启用导航(如果在鼠标模式下被禁用),以便玩家可以使用 D-pad 或左摇杆在 Selectable 对象之间导航。
如果已分配,Gamepad Controls 图例将被启用,而其他图例(按钮和键盘)将被禁用。
提示
如果您想自定义游戏手柄图例图标,请查看 Xelu 的免费游戏手柄按键提示图标。
此外,在游戏手柄模式下显示模态 UI 时,将聚焦其中第一个活动的 Selectable 对象,以防止焦点卡在先前选定的对象上。可以通过显式分配自定义 UI 或派生组件的 Focus Object 来更改此行为,在这种情况下,UI 不会尝试自动查找焦点对象。
键盘
当按下键盘导航(方向)键时激活。其他键不会激活此模式,因为它们在鼠标模式下用作热键。
除此之外,它的工作方式与游戏手柄模式相同,只是显示的按键图例不同。
触摸
在触摸模式下,Naninovel 默认不会对受管 UI 执行任何特殊更改。但是,您可以通过重写 CustomUI 组件的 HandleInputModeChanged 方法来添加特定于触摸的行为。
要为特定 UI 禁用适应输入模式功能,请取消选中 Custom UI(或派生)组件的 Adapt To Input Mode 选项。要全局禁用该功能,请使用输入配置中的 Detect Input Mode 选项。
自定义输入后端
Naninovel 允许使用自定义输入解决方案,例如 Rewired,而不是 Unity 的内置输入系统。引擎仅在 InputManager 类中的几个虚方法内使用默认输入系统 API,并且引用是条件编译的,确保即使删除了默认输入模块也不会发生编译错误。
要使引擎使用自定义输入解决方案,请 覆盖 InputManager 引擎服务并重写所需的虚方法。