4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Unity 敵の自動追従の設定

Posted at

0.0 はじめに

プレイヤーが敵から追いかけられる状況を作る方法です。
ちなみに自動追従式のことを英語でホーミング(Homing)と言うようです。

1.0 自動追従用のスクリプト

以下のスクリプトを自動追従するオブジェクト(敵など)に貼り付けます。
このスクリプトではプレイヤーをタグをたよりに取得しています。
忘れずにプレイヤーのタグをPlayerにしておきましょう。
image.png

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)も同じ処理がされます。

青い丸がPlayer、緑の丸が自動追尾するオブジェクト
MoveTowards.gif

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?