ランダムで出した数の中で、一度使った数を除外することで、重複無しの結果を導き出しましょう。
実行するたびに、5つのオブジェクトがランダムで積み上がりますが、同じCubeは存在しません。
このように、オブジェクトをシャッフルして配置できる仕組みを作ります。
関連記事:
数字をシャッフルする
シャッフル - 重複せずにランダム抽出
種類の違うPrefabをランダムで出現させる
ランダム表示したPrefabを順に配列に入れる
10分の1の確率で異なるPrefabを生成
配列内のオブジェクトを等間隔に並べる
重複せずに一つずつランダム出力(シャッフル)
重複した数値をリストから除外
空のオブジェクを作成します。
Cubeを作成して、名前をCube1に変更。
Cube1を複製して、Cube2~4も作成します。
わかりやすいように、Cube1~5に色をつけます。
Cube1~5をプロジェクトビューにドラッグ&ドロップして、Prefab化します。
Cube1~5の元データは削除しておきます。
ObjScript.csを作成し、GameObjectに追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ObjScript : MonoBehaviour { public GameObject[] myArray = new GameObject[5]; List<GameObject>myList = new List<GameObject>(); private int yPos; void Start() { foreach(GameObject item in myArray) { myList.Add(item); } while (myList.Count > 0) { int count = Random.Range(0, myList.Count); Instantiate(myList[count],new Vector3(0, yPos, 0),Quaternion.identity); myList.RemoveAt(count); yPos++; } } } |
MyArrayの要素の中に、Cube1~5を入れます。
何度かゲームプレイしてみましょう。
スタートするたびに、Cubeの種類がランダムで変わりますが、同じ種類のCubeは存在しません。
myArray(配列)の中に、あらかじめ5個のCubeを登録。
foreace文を使って、5個すべてのCubeを、myList(リスト)に追加。
リストは、要素を消し込んでいけるため、一度ランダムで出力したものは、都度リストから除外しています。
関連記事:
数字をシャッフルする
シャッフル - 重複せずにランダム抽出
種類の違うPrefabをランダムで出現させる
ランダム表示したPrefabを順に配列に入れる
10分の1の確率で異なるPrefabを生成
配列内のオブジェクトを等間隔に並べる
重複せずに一つずつランダム出力(シャッフル)