入力アクション
この記事は Godot 3から Godot 4 へ内容の書き換え中です。 Godot4では存在しない変数、関数が含まれている場合があります。もしその場合はリポジトリのIssuesまでご報告ください。
課題
Godotの「入力アクション」システムについて理解を深めたい。
解決策
例えば、見下ろし型キャラクターのゲームを開発していて、InputActionKeyを使って矢印キーで移動操作するコードを書いたとします。すると、多くのプレイヤーが「WASD」スタイルの操作方法を好き好んで使っていることに気づくと思います。後からコードに戻って追加のキーチェックを実装することもできますが、これでは重複した冗長なコードが生じてしまいます。
入力アクションを活用することで、コードの設定可能性を高めることができます。特定のキーをハードコーディングする代わりに、コードを変更せずに動的に調整・カスタマイズできるようになります。
入力の作成方法
入力操作は「プロジェクト設定」の「インプットマップ」タブで定義します。ここでは新しいアクションを作成するか、既存のアクションに入力を割り当てることができます。
タブをクリックすると、すでにデフォルトアクションが設定されていることがわかります。これらはすべて「ui_*」という名前になっており、これがデフォルトのインターフェース操作であることを示しています。例えば、次のUI要素に移動する「Tab」キーなどがあります。
一般的に、既存のアクションを使用するよりも、自分のゲーム用に独自のアクションを作成する方がよいでしょう。
この例では、プレイヤーがキーボードまたはマウスでゲームを操作できるようにしたいとします。プレイヤーは左クリックボタンを押すか、スペースバーを押すことで、射撃ができるようにしなければなりません。
以下の手順で新しいアクション「シュート」を作成してください。
- 最上部の「アクション」欄に名称を入力します
- 「追加」(またはEnterキー)をクリックします
- 画面を一番下までスクロールすると、新しく作成したアクションがリストに追加されているのが確認できるはずです
以下の手順でこのアクションに入力を割り当てることができます。右側にある「+」記号をクリックしてください。使用可能な入力には、キーボードキー、マウスボタン、またはジョイスティック/ゲームパッド入力があります。「キー」を選択したら、割り当てたいキーボード上のキーを押します - ここではスペースバーを押してみます - そして「OK」をクリックして確定します。
「+」をクリックして別の入力を追加してください。今回は「マウスボタン」を選択します。デフォルト設定の「デバイス 0」と「左ボタン」で問題ありませんが、お好みで他のオプションも選択できます。
入力アクションの使用について
以下の方法でアクションをチェックできます。
- 各フレームごとに単一インスタンス
Inputをポーリングする方法:
func _process(delta):
if Input.is_action_pressed("shoot"):
# This will execute every frame as long as the input is held.
これは、継続的な動作――例えば移動など、常時確認が必要な状況に最適です。
もし代わりに、アクションが発生したその瞬間に検出したい場合は、_input()または_unhandled_input()コールバックを使用できます。
func _unhandled_input(event):
if event.is_action_pressed("shoot"):
# This will run once on the frame when the action is first pressed
入力状態を確認するために使える関数があります。
is_action_pressed(): この関数は現在アクションが押された状態にある場合にtrueを返します。is_action_released(): この関数は、アクションがpressed状態にない場合にtrueを返します。is_action_just_pressed()/is_action_just_released(): これらのメソッドは上記と同様の機能を持ちますが、イベント発生後の1フレーム目にのみtrueを返す点が異なります。射撃やジャンプなど、ユーザーがキーを放した後に再度押して動作を繰り返す必要がある非反復アクションに特に有用です。