キーボードの矢印キーでキャラクターを上下左右に移動させる方法を紹介します。
目次
入力アクションの登録
まずは、キーボードの操作(今回は上下左右)を登録する必要があります。
メニューから「プロジェクト → プロジェクト設定」を選択します。

「インプットマップ」を開きます。

ここにアクションを追加していきます。
下の画像の「新しいアクションの追加」のところにアクション名を入力して「追加」ボタンを押してください。

例では次のようにmove_right、move_left、move_down、move_upとしておきました。

次に登録したそれぞのアクションにイベントを紐づけます。
画面右にある「+」ボタンを押してください。

イベント設定画面が表示されるので、「Right」を選択して「OK」ボタンを押します。

同様にしてそれぞれのアクションにイベントを設定すると、最終的に以下のようになります。

これで入力アクションの登録は完了です。
スクリプトで上下左右のキーが押されたかチェックする
キーが押されているかどうかを Input.is_action_pressed()
メソッドで検出できます。
押された場合は true
、押されていない場合は false
を返します。
以下、上下左右がキーが押されているか検出するためのコードです。
func _physics_process(delta):
if Input.is_action_pressed("move_right"):
print("右が押されました")
if Input.is_action_pressed("move_left"):
print("左が押されました")
if Input.is_action_pressed("move_down"):
print("下が押されました")
if Input.is_action_pressed("move_up"):
print("上が押されました")
Input.is_action_pressed()の()の中は先ほど登録したアクション名を指定する必要があります。
スペルミスに注意してください。
上下左右のキーが押された時にキャラクターを移動させる
上下左右のキーが検知できるようになったので、それぞれのキーを押したときにキャラクターを移動させます。
やり方は色々はありますが、以下はその一例です。
extends CharacterBody2D
var speed = 300.0
func _physics_process(delta):
# 速度ベクトルを初期化
var velocity = Vector2.ZERO
if Input.is_action_pressed("move_right"):
velocity.x += 1
if Input.is_action_pressed("move_left"):
velocity.x -= 1
if Input.is_action_pressed("move_down"):
velocity.y += 1
if Input.is_action_pressed("move_up"):
velocity.y -= 1
# 速度が0より大きい場合、速度を正規化し、速度ベクトルを更新
if velocity.length() > 0:
velocity = velocity.normalized() * speed
# 移動処理:キャラクターの位置を速度ベクトルと経過時間に基づいて更新
position += velocity * delta
Comment