今回は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); } }
パラメータ(ターゲットとなるプレイヤー)をセットします。
実行すると下記の様な感じに。敵キャラだけでなく、追尾する弾とかにも使えそうですね。