▶
【Unity】3Dアクションゲームを作ろう!#7 ステージの作成(Skybox・落下判定)
▶
【Unity】3Dアクションゲームを作ろう!#8 ステージの作成(スイッチ・扉)
▶
【Unity】3Dアクションゲームを作ろう!#9 プレイヤーのHP管理
▶
【初心者Unity】JsonUtilityクラスでJSONを扱う方法
▶
【初心者Unity】スクリプトからコンポーネントを追加する方法
Listを使って重複しない値をランダムに取得する
C#のListクラスを使って、1~10の範囲の整数を重複せずにランダムで取得するサンプルコードです。
まずListに対象範囲の整数をすべて入れて、乱数で指定したインデックスの値を取り出します。
取り出した値を表示した後、その値をリストから削除して同じ値が2回取り出されないようにしています。
基礎編 1~10の整数を重複なしでランダムに全て出力するサンプル
using UnityEngine; using System.Collections.Generic; public class Test : MonoBehaviour { int start = 1; int end = 10; List<int> numbers = new List<int>(); void Start() { for (int i = start; i <= end; i++) { numbers.Add(i); } while (numbers.Count > 0) { int index = Random.Range(0, numbers.Count); int ransu = numbers[index]; Debug.Log(ransu); numbers.RemoveAt(index); } } }
Listクラスは可変長配列として振る舞います。
通常の配列同様、先頭のインデックス(要素番号)は0番目として扱います。
要素の取り出しはリスト名[インデックス]、要素数の取得はリスト名.Countです。
要素の追加はAdd( )メソッドを使い、インデックスを指定して要素を削除するときはRemoveAt( )メソッドを使います。
リスト中の要素が削除されると、インデックスは前に詰まります。(例えば0番目を削除すると、1番目が0番目となる。)
UnityのRandom.Range( )メソッドは、引数に指定した2つの値の範囲から、ランダムに値を返すメソッドです。
使用上の注意として、引数に整数(int)を指定すると第2引数のmax値は乱数の範囲に含みません。
ただし、引数に小数点数(float)を指定した場合はmaxも乱数の範囲に含まれます。
応用編 1~100の整数を重複なしでランダムに5個出力するサンプル
応用として、今度は値を5個だけ取得してみましょう。ついでに1~100に範囲を広げてみました。
using UnityEngine; using System.Collections.Generic; public class Test : MonoBehaviour { int start = 1; int end = 100; int count = 5; List<int> numbers = new List<int>(); void Start() { for (int i = start; i <= end; i++) { numbers.Add(i); } while (count-- > 0) { int index = Random.Range(0, numbers.Count); int ransu = numbers[index]; Debug.Log(ransu); numbers.RemoveAt(index); } } }
ループの回数を自分で指定することろがポイントです。
以上です。
▶
【Unity】3Dアクションゲームを作ろう!#7 ステージの作成(Skybox・落下判定)
▶
【Unity】3Dアクションゲームを作ろう!#8 ステージの作成(スイッチ・扉)
▶
【Unity】3Dアクションゲームを作ろう!#9 プレイヤーのHP管理
▶
【初心者Unity】JsonUtilityクラスでJSONを扱う方法
▶
【初心者Unity】スクリプトからコンポーネントを追加する方法
ゲーム制作関連のオススメ連載リンク
とっても手軽なゲーム制作体験!
Unityゲーム開発基礎
実際のリリースゲームを題材にしたハンズオンゲーム制作連載
実践unityゲーム開発