godot InputSystem
godotでは入力はInputEventが組み込みで複数用意されている
InputEventKey
keyの押下
InputEventMouseButton
マウスボタンの押下
InputEventJoypadButton
joypadのボタンの押下
view port側で受け取った入力イベントは順次処理される
イベントをどのイベントとして解釈するかは順序がある
処理されなければ次のイベントとして処理しようとする
https://gyazo.com/9d1524b7829bf6d9fe9caf7cc9c2f902
Gui Eventが比較的処理順が早い位置にいるので、ユーザーからの入力はGUIが優先して処理する。
このルールで通常は困らないので、通常の入力はUnhandled Input Evnetとして処理するほうが望ましい
code:gdscript
func _unhandled_input(event):
if event is InputEventKey:
if event.pressed and event.keycode == KEY_ESCAPE:
get_tree().quit()
デバイスに左右されず、またkeymappingの変更等も実装しやすくするためにActionがある
Actionは複数のInputEventをグループ化して抽象化したもの
MouseButtonのクリック、Keyboardのボタンを同一のグループにしてくことで入力を抽象化できる
InputEventActionというイベントとして扱われる
is_action_pressed()でactionの発生の有無をしらべる
具体的なデバイスの入力とInputEventの紐づけしたActionはInputMapで設定する
これは通常はproject settingsで設定する
Project > Project Settings > Input Map
ただしkey mapのような動的にマッピングを変えたい場合はInputMapをコード上でいじる
InputMapはシングルトン