敵をランダムな位置に生成する【Unityメモ】

今回はUnity2Dで「ランダムな敵」を「ランダムな位置」に生成してみます。

はじめに

Unityのバージョンは2021.3.14f1です。

複数いる敵をランダムに選択し、ランダムな位置に生成してみます。敵キャラだけでなくアイテムなどにも使えそうな感じです。

実装開始

簡単な敵キャラを複数作成し、スクリプトで実装していきます。

敵キャラの作成

Hierarchyで右クリック、「2DObject」→「Sprites」→「Square」を選択。

名前をEnemy_Redに変更、Scaleを変更してColorを赤に変更。

Assetsフォルダ内にドラッグアンドドロップし、プレハブ化します。

同じように、青色と黄色も作成。3種類の敵とします。

スクリプトの作成

下記スクリプトを作成。Startでランダムな位置を生成、SpawnEnemyでランダムに敵を選び生成します。

using UnityEngine;

public class Spawner : MonoBehaviour
{
    [SerializeField] private GameObject[] enemyPrefabs;

    private void Start()
    {
        Vector2 position = new Vector2(Random.Range(-5f, 5f), Random.Range(-5f, 5f));
        SpawnEnemy(position);
    }
    private void SpawnEnemy(Vector3 position)
    {
        GameObject enemy = enemyPrefabs[Random.Range(0, enemyPrefabs.Length)];
        Instantiate(enemy, position, Quaternion.identity, transform);
    }
}

CreateEmptyで空オブジェクトを追加、名前をSpawnerにしておきます。

スクリプトをアタッチして、Enemyをセットします。

修正

位置を修正して画面内に指定します。

Spawnerの配下に空オブジェクトを追加して、位置を下記の様にセットします。

下記のようにスクリプトを修正、下記では画面内に100体の敵キャラを生成。

using System.Collections;
using UnityEngine;

public class Spawner : MonoBehaviour
{
    [SerializeField] private GameObject[] enemyPrefabs;
    [SerializeField] private Transform LeftTop;
    [SerializeField] private Transform RightBottom;

    private float minX, maxX, minY, maxY;

    private void Start()
    {
        minX = LeftTop.position.x;
        maxX = RightBottom.position.x;
        minY = RightBottom.position.y;
        maxY = LeftTop.position.y;

        StartCoroutine(SpawnEnemy());
    }
    private IEnumerator SpawnEnemy()
    {
        for (int i = 0; i < 100; i++)
        {
            Vector2 position = new Vector2(Random.Range(minX, maxX), Random.Range(minY, maxY));

            GameObject enemy = enemyPrefabs[Random.Range(0, enemyPrefabs.Length)];
            Instantiate(enemy, position, Quaternion.identity, transform);

            yield return new WaitForSeconds(1.0f);
        }
    }
}

パラメータをセットします。

実行すると下記のように。

実際には敵キャラの生成タイミングやDestoryで破棄するなどが必要になりますね。

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