追いかけるペット

課題

ゲーム要素としてペットやミニオンを追加してください。なので、キャラクターに追従させる必要があります。

解決策

まず、キャラクターに Marker2D を追加してください。このマーカーは、ペットがプレイヤーの近くに「滞在したい」場所を示すものです。

alt alt

この例では、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