追いかけるペット
課題
ゲーム要素としてペットやミニオンを追加してください。なので、キャラクターに追従させる必要があります。
解決策
まず、キャラクターに Marker2D を追加してください。このマーカーは、ペットがプレイヤーの近くに「滞在したい」場所を示すものです。
この例では、Sprite2Dの子要素として設定しています。これはキャラクターのコード内で $Sprite2D.scale.x = -1 を使用して左移動時に水平方向を反転させているためです。マーカーはスプライトの子要素であるため、同様に反転表示されます。
ペット用スクリプト
以下はペット用の台本です。
extends CharacterBody2D
@export var parent : CharacterBody2D
var speed = 25
@onready var follow_point = parent.get_node("Sprite2D/FollowPoint")
parent変数には、ペットが追従すべきキャラクターへの参照情報が格納されています。その後、そのノードからFollowPointを取得し、_physics_process()関数内でその位置情報を取得します。
func _physics_process(delta):
var target = follow_point.global_position
velocity = Vector2.ZERO
if position.distance_to(target) > 5:
velocity = position.direction_to(target) * speed
if velocity.x != 0:
$Sprite2D.scale.x = sign(velocity.x)
if velocity.length() > 0:
$AnimationPlayer.play("run")
else:
$AnimationPlayer.play("idle")
move_and_slide()
目標地点に近い場合は、ペットの移動を停止します。
障害物の回避方法
ワールドによっては、ペットが障害物に引っかかってしまう場合があります。より堅牢な追従機能が必要な場合は、ナビゲーションシステムをご利用ください。具体的な実装例についてはタイルマップナビゲーションを参照してください。
プロジェクトのダウンロード
プロジェクトのサンプルコードはこちらからダウンロードできます。https://github.com/godotrecipes/ai_behavior_demos