0.0 はじめに
プレイヤーが敵から追いかけられる状況を作る方法です。
ちなみに自動追従式のことを英語でホーミング(Homing)と言うようです。
1.0 自動追従用のスクリプト
以下のスクリプトを自動追従するオブジェクト(敵など)に貼り付けます。
このスクリプトではプレイヤーをタグをたよりに取得しています。
忘れずにプレイヤーのタグをPlayerにしておきましょう。
C# Test.cs
using UnityEngine;
public class Homing : MonoBehaviour
{
Transform playerTr; // プレイヤーのTransform
[SerializeField] float speed = 2; // 敵の動くスピード
private void Start() {
// プレイヤーのTransformを取得(プレイヤーのタグをPlayerに設定必要)
playerTr = GameObject.FindGameObjectWithTag("Player").transform;
}
private void Update() {
// プレイヤーとの距離が0.1f未満になったらそれ以上実行しない
if (Vector2.Distance(transform.position, playerTr.position) < 0.1f)
return;
// プレイヤーに向けて進む
transform.position = Vector2.MoveTowards(
transform.position,
new Vector2(playerTr.position.x, playerTr.position.y),
speed * Time.deltaTime);
}
}
2.0 MoveTowards関数 Vector2.MoveTowards(Vector2 current, Vector2 target, float maxDistanceDelta)
MoveTowards関数はオブジェクトを目的地に移動させる際に使われる関数です。引数で設定するのは「現在地の座標current」、「目的地の座標target」、「速度の値maxDistanceDelta」です。上のスクリプトでは “current” に自分の座標、”target” にプレイヤーの座標、”maxDistanceDelta” にspeedの値にした1フレームでの移動距離(=速度)を指定することで敵がプレイヤーを追いかけるようになっています。
ちなみにVector3を使ったMoveTowards関数であるVector3.MoveTowards(Vector2 current, Vector2 target, float maxDistanceDelta)も同じ処理がされます。