[Unity 2D] 敵を自動徘徊(ランダム移動)させる

どうも、tatsuです!

今回は敵を自動徘徊(ランダム移動)させる方法について説明しようと思います。

敵を自動徘徊(ランダム移動)させる

敵を自動徘徊させるにはいくつか方法がありますが、今回は目的地を設定して目的地に着いたら別の目的地を指定するといったやり方を行ってみます。
以下のスクリプトを自動徘徊させたい敵キャラクターにアタッチしてください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class autoEnemy : MonoBehaviour{

    // 目的地に着いたかどうか
    private bool isReachTargetPosition;
    // 目的地
    private Vector3 targetPosition;

    // x軸 下限
    public const float X_MIN_MOVE_RANGE = -4f;
    // x軸 上限
    public const float X_MAX_MOVE_RANGE = 4f;
    // y軸 下限
    public const float Y_MIN_MOVE_RANGE = -2f;
    // y軸 上限
    public const float Y_MAX_MOVE_RANGE = 2f;
    // 移動スピード
    public const float SPEED = 0.03f;

    void Start(){
        this.isReachTargetPosition = false;
        decideTargetPotision();
    }

    void Update(){
        decideTargetPotision();

        // 現在地から目的地までSPEEDの速度で移動する
        transform.position = Vector3.MoveTowards(transform.position, targetPosition, SPEED);
        // 目的地についたらisReachTargetPositionをtrueにする
        if(transform.position == targetPosition){
            isReachTargetPosition = true;
        }
    }

    // 目的地を設定する
    private void decideTargetPotision(){
        // まだ目的地についてなかったら(移動中なら)目的地を変えない
        if(!isReachTargetPosition){
            return;
        }

        // 目的地に着いていたら目的地を再設定する
        targetPosition = new Vector3(Random.Range(X_MIN_MOVE_RANGE, X_MAX_MOVE_RANGE), Random.Range(Y_MIN_MOVE_RANGE, Y_MAX_MOVE_RANGE), 0);
        isReachTargetPosition = false;
    }
}

 

うまくいけば上のgifのように自動徘徊できているのではないでしょうか?

よくあるのは、通常行動としてこのように自動徘徊させておき、プレイヤーが一定範囲内に入ってきたら攻撃行動をとるって感じですかね。
プレイヤーを追尾するスクリプトと掛け合わせてみても面白いと思います。

[Unity 2D] プレイヤーに追尾する敵を作る

2019年8月12日

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です