概要
GodotのInput Mapは、物理的なキー("Aキー")を抽象的なアクション名("move_left")に変換する機能です。これにより 、コードの可読性向上とキーコンフィグ機能の実装が容易になります。
最初はInput Mapを使わずに、Input.is_key_pressed(KEY_A)
のように直接キーを指定していました。でも「キーボードとゲームパッド両方に対応したい」と思った時、コードがどんどん複雑になってしまいました。Input Mapを使うようになってからは、コードがすっきりし、キー設定の変更も簡単になりました。
設定方法
プロジェクト設定 → Input Map

- アクション名を追加(例:
move_left
) - キーを割り当て(複数可能)
- Aキー
- 左矢印キー
- ゲームパッド左スティック左
基本的な使い方
単一入力の取得
func _process(delta):
# 単発の入力(押された瞬間)
if Input.is_action_just_pressed("interact"):
open_chest()
# 継続的な入力(押されている間)
if Input.is_action_pressed("dash"):
speed = DASH_SPEED
else:
speed = NORMAL_SPEED
2軸入力の取得(便利!)
func _physics_process(delta):
# 4つのアクションから正規化されたVector2を返す
var direction = Input.get_vector("move_left", "move_right", "move_up", "move_down")
velocity = direction * speed
move_and_slide()
Input.get_vector()の利点
# 従来の方法(冗長)
var direction = Vector2.ZERO
if Input.is_action_pressed("move_left"):
direction.x -= 1
if Input.is_action_pressed("move_right"):
direction.x += 1
if Input.is_action_pressed("move_up"):
direction.y -= 1
if Input.is_action_pressed("move_down"):
direction.y += 1
direction = direction.normalized()
# get_vector()を使った方法(簡潔)
var direction = Input.get_vector("move_left", "move_right", "move_up", "move_down")
- 自動的に正規化されたVector2を返す
- 斜め移動時も適切な速度を保つ
- アナログスティックの傾きも考慮
実践的な活用例
プレイヤーの8方向移動
extends CharacterBody2D
@export var speed = 200.0
@export var dash_speed = 400.0
func _physics_process(delta):
var direction = Input.get_vector("move_left", "move_right", "move_up", "move_down")
# ダッシュ判定
var current_speed = dash_speed if Input.is_action_pressed("dash") else speed
velocity = direction * current_speed
move_and_slide()
# アニメーション更新
update_animation(direction)
func update_animation(direction: Vector2):
if direction.length() > 0:
if abs(direction.x) > abs(direction.y):
# 横方向が優先
$AnimatedSprite2D.play("walk_right" if direction.x > 0 else "walk_left")
else:
# 縦方向が優先
$AnimatedSprite2D.play("walk_down" if direction.y > 0 else "walk_up")
else:
$AnimatedSprite2D.stop()
動的なキーコンフィグ
# キー変更機能の実装例
func change_key_binding(action: String, new_key: InputEvent):
# 既存のキーをクリア
InputMap.action_erase_events(action)
# 新しいキーを追加
InputMap.action_add_event(action, new_key)
# 設定を保存
save_key_config()
推奨されるアクション名
アクション名 | 用途 | デフォルトキー例 |
---|---|---|
move_left/right/up/down | 移動 | WASD, 矢印キー |
interact | 調べる、話す | E, Space |
attack | 攻撃 | Z, マウス左 |
dash | ダッシュ | Shift |
pause | ポーズ | Esc, Start |
注意点
- アクション名は分かりやすく統一感のある命名を心がける
- 同じキーを複数のアクションに割り当てると競合する
- プロジェクト設定で定義したアクションのみ使用可能
実装して学んだこと
Input Mapの一番の恩恵はInput.get_vector()
関数です。以前は8方向移動の実装に何十行もコードを書いていましたが、この関数のおかげでたった1行に!さらにアナログスティックの入力も自動的に処理してくれるので、コントローラー対応も楽になりました。
アクション名の命名ルールも重要です。最初は「左」「右」のような日本語を使っていましたが、チーム開発やドキュメントを考えると英語の方がいいと気づきました。「move_left」のように「動作_方向」の形式に統一すると、コードがとても読みやすくなります。