キーボードの矢印キーでキャラクターを上下左右に移動させる方法を紹介します。
目次
入力アクションの登録
まずは、キーボードの操作(今回は上下左右)を登録する必要があります。
メニューから「プロジェクト → プロジェクト設定」を選択します。
![](https://seeds-digital.com/wp-content/uploads/2024/05/8fe73f41d0269171120cb5b06c5bc1b6-1024x628.png)
「インプットマップ」を開きます。
![](https://seeds-digital.com/wp-content/uploads/2024/05/b09adb2d6590b93e0522dbd4e9480c60-1024x274.png)
ここにアクションを追加していきます。
下の画像の「新しいアクションの追加」のところにアクション名を入力して「追加」ボタンを押してください。
![](https://seeds-digital.com/wp-content/uploads/2024/05/89b815ea8f09c5e5e94cacc307593b3a-1024x237.png)
例では次のようにmove_right、move_left、move_down、move_upとしておきました。
![](https://seeds-digital.com/wp-content/uploads/2024/05/c10bc6bfca8a529761d2b506c4df2cd3-1024x404.png)
次に登録したそれぞのアクションにイベントを紐づけます。
画面右にある「+」ボタンを押してください。
![](https://seeds-digital.com/wp-content/uploads/2024/05/c10bc6bfca8a529761d2b506c4df2cd3-1-1024x404.png)
イベント設定画面が表示されるので、「Right」を選択して「OK」ボタンを押します。
![](https://seeds-digital.com/wp-content/uploads/2024/05/c77fbd55c9625db5b2126558cd3e5593-1024x797.png)
同様にしてそれぞれのアクションにイベントを設定すると、最終的に以下のようになります。
![](https://seeds-digital.com/wp-content/uploads/2024/05/d6cc1d04d549cf1cadca1702d65949af-1024x489.png)
これで入力アクションの登録は完了です。
スクリプトで上下左右のキーが押されたかチェックする
キーが押されているかどうかを 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