ゲーム制作技術録

主にUnity/Godot4関連の技術ブログです

【Godot4】入力の取得(InputEvent)

Godot4とGDScriptでプレイヤーのデバイス入力情報の取得についてまとめました。

Godot 4.1.1

InputEventについて

Godotの入力システムはUnityのInputSystemと似たようなシステムが採用されているようです。

docs.godotengine.org

エンジン側から渡されたイベント情報を参照して、目的のキーが押されたかなどのステートの条件分岐で処理を実行します。

3.xでは、プレイヤーの移動や攻撃など、ゲームプレイに関するinput操作は_unhandled_input(event)で処理するのが一般的らしいです。

4.xはどうなんですかね。

InputMapについて

上記の管理方法とは別にInputMapと呼ばれる機能があり、こちらの方が便利そうなので今回はこちらを使っていきます。

入力の管理にActionという単位が使われ、1つのアクションに対して複数タイプの入力をまとめておくことで、複数タイプの入力をアクション単位で管理することができます。

アクションをまとめた一覧みたいなものをInputMapと呼びます。

上の画像がそうです。

InputMapプロジェクト > プロジェクト設定からウィンドウを開き、上部タブからインプットマップを開きます。

デフォルトで設定されているアクションを表示するには右上の組み込みアクションを表示のトグルをオンにします。

InputMapにアクションの登録

InputMapにアクションを登録するには、入力欄にアクション名を入力してから「追加」ボタンを押します。

キーバインド

作成したアクションにキーやボタンのバインドをおこなうにはアクションの右にある「+」マークを押して出てきたウィンドウで入力イベントを登録します。

今回はアクション名は「fire」、バインドは「マウス左クリック」と「パッドのEastボタン」を登録したので、左クリックとパッドのボタンを「fire」アクションとして検知できるようになりました。

入力検知の実装

書き方はあまり気にするところはありません。

is_action_pressed()で入力しているかを、is_action_just_pressed()で押した瞬間を検知できます。

離した時は離した時であります。

スクリプトの作成やアタッチなどは他の記事を読んでいただくとして、スクリプトに以下のコードをペシペシ書きます。

実行結果

実行結果は以下の通りです。

押した瞬間は「just pressed」

押している間は「is pressing」

がそれぞれ出力されているのが分かります。

参考