リストの中から、重複せずにランダムで表示させるシャッフルの仕組みを作ってみましょう。
今回の例では、5個のオブジェクトからランダムで、異なる3つを取り出します。
上部のリストからランダムで1つずつ、下のリストへ追加。
取り出したオブジェクトは上部のリストから削除し、再び選択されないようにします。
関連記事:
数字をシャッフルする
シャッフル - 重複なしでオブジェクトを並べる
種類の違うPrefabをランダムで出現させる
ランダム表示したPrefabを順に配列に入れる
10分の1の確率で異なるPrefabを生成
重複せずに一つずつランダム出力(シャッフル)
ランダムで同じオブジェクトを表示させない
Cubeを5個、空のオブジェクトを1個作成しました。
ShuffleList.csを作成し、GameObjectに追加します。
ShuffleList.csを記述します。
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 ShuffleList : MonoBehaviour { public List<GameObject> myList; public List<GameObject> useList = new List<GameObject>(); private GameObject randomObj; private int choiceNum; void Start() { for(int i=0; i<3; i++) { //myListの中からランダムで1つを選ぶ randomObj = myList[Random.Range(0, myList.Count)]; //選んだオブジェクトをuseListに追加 useList.Add(randomObj); //選んだオブジェクトのリスト番号を取得 choiceNum = myList.IndexOf(randomObj); //同じリスト番号をmyListから削除 myList.RemoveAt(choiceNum); } } } |
MyListを展開し、サイズに5を入力。
要素0~4の中へ、それぞれCubeオブジェクトをドラッグ&ドロップします。
ゲームプレイしてみましょう。
MyListにある5個のオブジェクトから、3個を順番にランダム抽出。
取り出したオブジェクトは、MyListから削除していますので、同じものが選ばれることはありません。
関連記事:
数字をシャッフルする
シャッフル - 重複なしでオブジェクトを並べる
種類の違うPrefabをランダムで出現させる
ランダム表示したPrefabを順に配列に入れる
10分の1の確率で異なるPrefabを生成
重複せずに一つずつランダム出力(シャッフル)