今回はUnity2Dでプレイヤーを自動追尾する敵を実装してみます。
はじめに
Unityのバージョンは2021.3.14f1です。
下記にてマウス位置にプレイヤーが移動するのを実装しています。今回は、その続きで「動くプレイヤーを自動で追いかける敵」を作成してみます。
実装開始
Hierarchyで右クリックして、「2DObject」→「Sprites」→「Circle」を追加。

名前をhomingに変更して、スケールを変更。下記の様な感じにします。白丸がプレイヤーを追いかけるようにします。

「AddComponent」から「Rigidbody2D」をアタッチしてGravityScaleを0に。homingと言う名前でスクリプトをアタッチします。

スクリプトの作成
スクリプトの中身は下記に変更します。AddForceで力を加えて敵キャラを加速、Quaternion.Slerpで敵キャラの方向を変更しています。
using UnityEngine;
public class homing : MonoBehaviour
{
[SerializeField] private Transform target;
private float speed = 200.0f;
private float rotationSpeed = 300.0f;
private Rigidbody2D rb;
private void Start()
{
rb = GetComponent<Rigidbody2D>();
}
void FixedUpdate()
{
Vector2 dir = (player.position - transform.position).normalized;
rb.AddForce(dir * speed * Time.fixedDeltaTime);
float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg - 90f;
Quaternion target = Quaternion.AngleAxis(angle, Vector3.forward);
transform.rotation = Quaternion.Slerp(transform.rotation, target,
rotationSpeed * Time.fixedDeltaTime);
}
}
パラメータ(ターゲットとなるプレイヤー)をセットします。

実行すると下記の様な感じに。敵キャラだけでなく、追尾する弾とかにも使えそうですね。

