---
title: Godot 输入集成
description: 说明 GFramework.Godot 如何把 InputMap 与 project.godot InputActions 接到新的框架输入抽象。
---

# Godot 输入集成

`GFramework.Godot.Input` 负责把 Godot 的 `InputMap` 绑定表接到 `GFramework.Game.Abstractions.Input` 契约。

当前入口是：

- `GodotInputBindingStore`
  - 读取 / 写回 `InputMap`
  - 导出 / 导入 `InputBindingSnapshot`
  - 把逻辑动作名继续桥接给 `Game` 层的绑定存储与 UI 输入分发语义

## 与 `project.godot` 的关系

当前推荐组合仍然是：

- `project.godot`
  - 继续定义动作名与默认绑定
- `GFramework.Godot.SourceGenerators`
  - 继续生成 `InputActions.*` 字符串常量
- `GFramework.Godot.Input.GodotInputBindingStore`
  - 负责运行时读取默认绑定、替换主绑定、恢复默认和导出快照

这意味着新的运行时输入系统不会替代 `InputActions`，而是把它当作稳定动作名入口继续使用。

## 最小接入方式

```csharp
using GFramework.Game.Abstractions.Input;
using GFramework.Game.Input;
using GFramework.Godot.Generated;
using GFramework.Godot.Input;

var bindingStore = new GodotInputBindingStore();

var acceptBinding = bindingStore.GetBindings(InputActions.UiAccept);
bindingStore.SetPrimaryBinding(
    InputActions.UiAccept,
    new InputBindingDescriptor(
        InputDeviceKind.KeyboardMouse,
        InputBindingKind.Key,
        "key:32",
        "Space"));
```

如果你已经有 `UiRouterBase`，还可以继续把动作名桥接到 UI 语义：

```csharp
var dispatcher = new UiInputDispatcher(new UiInputActionMap(), uiRouter);
dispatcher.TryDispatch(InputActions.UiCancel);
```

## 当前边界

- `GodotInputBindingStore` 当前聚焦 `InputMap` 绑定管理，而不是完整 gameplay input runtime
- 当前测试覆盖的是纯托管后端语义，不是 Godot 原生 `InputEvent` 对象在所有宿主中的行为差异
- 设备品牌、手柄图标、震动预设等宿主特化体验仍应视为 Godot 专属扩展，不上升到 `Game.Abstractions`

## 相关主题

- [Game 输入系统](../game/input.md)
- [Godot 运行时集成](./index.md)
- [Godot 集成教程](../tutorials/godot-integration.md)
