Unityで複数の指定した位置にランダムで生成

当ページのリンクには広告が含まれています。

今回はUnityで「特定の位置」に「ランダムで生成」してみます。

はじめに

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

下記記事では「指定した範囲内」にランダムに生成しています。

今回はあらかじめ「指定した複数の場所」からランダムに選択して生成してみます。

実装開始

特定の場所を複数作成して、スクリプトにてランダムで指定個数生成していきます。

特定位置の指定

空オブジェクトを追加して名前を「Points」に、配下に空オブジェクトを任意の数追加して、それぞれの位置を変更します。下記、青いダイヤの位置に各ポイントをセットしています。

生成したいオブジェクトをプレハブ化しておきます。

スクリプトを作成。名前は「RandomSpawner」、中身を下記に変更します。パラメータで指定した位置を格納して、指定した数だけオブジェクトを生成しています。一度生成した場所には再度生成しないようにリストから除外しています。

using System.Collections.Generic;
using UnityEngine;

public class RandomSpawner : MonoBehaviour
{
    [SerializeField] private GameObject Prefab;
    [SerializeField] private List<Transform> spawnPoints;
    [SerializeField] private int Number;

    private List<Transform> enablePoints = new List<Transform>();

    private void Start()
    {
        enablePoints = new List<Transform>(spawnPoints);

        for(int i = 0; i < Number; i++)
        {
            int index = Random.Range(0, enablePoints.Count);
            Transform randomPoint = enablePoints[index];

            Instantiate(Prefab, randomPoint.position, Quaternion.identity);

            enablePoints.RemoveAt(index);
        }
    }
}

プレハブと各ポイント、生成数のパラメータをセットします。

実行すると下記の様に生成されます。(生成位置はランダムです)

生成したいオブジェクトが複数ある場合、プレハブを配列に変更。

    [SerializeField] private GameObject[] Prefabs;

「Instantiate」で生成する場所の一つ上に下記を追加してプレハブもランダムで選択するように変更。

    GameObject Prefab = Prefabs[Random.Range(0, Prefabs.Length)];

パラメータを下記の様に変更

実行すると下記の様に。

下記のもぐら叩きでも似たような仕組みを利用してランダムにモグラが出現するように実装しています。あらかじめ指定した位置にランダムで生成したい場合に利用する感じです。

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