斜め移動の速度をそろえる
CoddyのGodotジャーニー「入力と移動」セクションの一部。レッスン 11/28。
前のレッスンのヒーローは、斜め方向に速く動きすぎます。上と右を同時に押すと、速度は Vector2(200, -200) になります。このベクトルの長さは約283ピクセルで、200ではありません。
.normalized() はベクトルの向きを保ったまま、長さをちょうど1にします。それに速度を掛けます。
var direction = Vector2(Input.get_axis("move_left", "move_right"), Input.get_axis("move_up", "move_down"))
velocity = direction.normalized() * speed
move_and_slide()これで、どの方向にも毎秒200ピクセルで移動します。Vector2(0, 0) は正規化してもゼロのままなので、ヒーローは停止します。
Input.get_vector() は、長さが最大1の方向ベクトルをすでに返します。velocity = Input.get_vector("move_left", "move_right", "move_up", "move_down") * speed でも、斜め方向の移動速度は均等になります。
チャレンジ
中級斜め方向でも、ヒーローの速度が同じになるようにしましょう。
- 両方の軸を1つの
Vector2にまとめます:var direction = Vector2(Input.get_axis("move_left", "move_right"), Input.get_axis("move_up", "move_down"))。 - 2行ある
velocityの代わりに、velocityをdirection.normalized() * speedに設定します。
「プレイ」を押すと、ヒーローは斜め方向も含め、あらゆる方向に毎秒200ピクセルで歩きます。次に「確認」を押します。
自分で試してみよう
extends CharacterBody2D
var speed = 200
func _physics_process(delta):
velocity.x = Input.get_axis("move_left", "move_right") * speed
velocity.y = Input.get_axis("move_up", "move_down") * speed
move_and_slide()
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
入力と移動のすべてのレッスン
自分で練習してみよう: Godotプレイグラウンド