プレイヤーを自動で追尾する-ホーミング-【Unityメモ】

今回は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);

    }
}

パラメータ(ターゲットとなるプレイヤー)をセットします。

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

タイトルとURLをコピーしました