この記事は Google 翻訳による英語翻訳の結果であり、これに DrGraph がいくつかの修正を加えたものです。英語のオリジナルページ:
プレイヤーの入力を聞く — Godot Engine (安定版) ドキュメント (英語)
プレーヤーの入力を聞く¶
最初のスクリプトを作成するという前のレッスンを基にして、ゲームのもう 1 つの重要な特性である、プレーヤーへの制御の引き渡しを見てみましょう。これを追加するには、コードを変更する必要がありますsprite_2d.gd
。
Godot でプレーヤー入力を処理するための 2 つの主要なツールがあります。
-
組み込みの入力コールバックは、基本的に と
_unhandled_input()
同様_process()
、プレーヤーがキーを押すたびに Godot が呼び出す組み込みの仮想関数です。これは、Space キーを押してジャンプするなど、フレームごとに発生しないイベントに反応するために使用するツールです。入力コールバックの詳細については、「InputEvent の使用」を参照してください。 -
Input【单例singleton】
。シングルトンはグローバルにアクセス可能なオブジェクトです。Godot は、いくつかのスクリプトへのアクセスを提供します。これは、入力のすべてのフレームをチェックするのに最適なツールです。
Input
プレイヤーがフレームごとに回転したいのか移動したいのかを知る必要があるため、ここではシングルトンを使用します。
回転するには、新しい変数を使用する必要があります: direction
。私たちの_process()
関数では、前の内容を次のコードに置き換えます [rotation += angular_speed * delta】
var方向 = 0
、 Input.is_action_pressed("ui_left")の場合:
方向 = -1 、 Input.is_action_pressed("ui_right")の場合:
方向 = 1
回転 += angular_speed * 方向 * デルタ
ローカルdirection
変数は、プレーヤーが向きを変えたい方向を表す係数です。値は0
、プレーヤーが左矢印キーまたは右矢印キーを押さなかったことを示します。1
プレーヤーが右に曲がりたいことを示す値、-1
つまり左に曲がりたいことを意味します。
これらの値を生成するために、Input
GDScript のキーワードでif
始まりコロンで終わる条件判断と使用法を導入します。特定の条件は、キーワードと行末の間の式です。
このフレームでキーが押されたかどうかを確認するには、 を呼び出しますInput.is_action_pressed()
。このメソッドは入力アクションを表すテキスト文字列を受け取り、true
アクションが押された場合は返し、false
そうでない場合は返します。
上で使用した 2 つのアクション、「ui_left」と「ui_right」は、すべての Godot プロジェクトで事前定義されています。これらは、プレーヤーがキーボードの左矢印と右矢印、またはゲームパッドの方向パッドの左矢印と右矢印をそれぞれ押すと起動します。
注: [プロジェクト] -> [プロジェクト設定] に移動し、[入力マッピング] タブをクリックすると、プロジェクト内の入力アクションを表示および編集できます。
最後に、direction
要素を使用してノードを更新します rotation
。 rotation += angular_speed * direction * delta
このコードを使用してシーンを実行すると、左右を押すとアイコンが回転するはずです。
「上」を押すと移動¶
キーが押されたときだけ移動するには、速度を計算するコードを変更する必要があります。var velocity
先頭行を以下のコードに置き換えます。
var速度 = Vector2.ZERO if Input.is_action_pressed("ui_up"): 速度 = Vector2.UP.rotated(回転) * 速度
velocity
Vector2.ZERO
長さ 0 の 2 次元ベクトルを表すVector
別の組み込み型定数、 value で初期化します。
プレイヤーが「ui_up」アクションを押すと、速度値を更新してスプライトを前進させます。
完全なスクリプト¶
参照用の完全なsprite_2d.gd
ファイルは次のとおりです。
Sprite2Dを拡張しますvarspeed = 400 var angular_speed = PI func _process(delta): var direct = 0 if Input.is_action_pressed("ui_left"): 方向 = -1 if Input.is_action_pressed("ui_right"): 方向 = 1 回転 += angular_speed * 方向 * デルタvar速度 = Vector2.ZERO if Input.is_action_pressed("ui_up"): 速度 = Vector2.UP.rotated(回転) * 速度 位置 += 速度 * デルタ
シーンを実行すると、左右の矢印キーを使用して回転し、上を押して前に進むことができるようになります。
概要¶ _
要約すると、Godot の各スクリプトはクラスを表し、エンジンの組み込みクラスの 1 つを拡張します。クラスの継承元のノード タイプにより、スプライトの例のプロパティなど、基本クラスのプロパティにアクセスできるようになりrotation
ますposition
。この例では使用していない多くの機能も継承します。
GDScript では、ファイルの先頭に配置される変数はクラスのプロパティであり、メンバー変数とも呼ばれます。変数に加えて、関数も定義できます。関数は、ほとんどの場合、クラスのメソッドになります。
Godot は、クラスをエンジンに接続するために定義できるいくつかの仮想関数を提供します。これには、_process()
フレームごとにノードに変更を適用することや、_unhandled_input()
キーの押下やボタンの押下などのユーザーからの入力イベントの受信が含まれます。他にもたくさんあります。
Input
シングルトンを使用すると、コード内のどこからでもプレーヤー入力に反応できます。特に、_process()
ループ内で使用します。
次のレッスン「シグナルの使用」では、ノードにスクリプト内のコードをトリガーさせることで、スクリプトとノード間の関係を構築します。