Tips

【Unity_C#】1~10の乱数を重複なしでサクッと取得するサンプル

【Unity_C#】1~10の乱数を重複なしでサクッと取得するサンプル

Listを使って重複しない値をランダムに取得する

C#のListクラスを使って、1~10の範囲の整数を重複せずにランダムで取得するサンプルコードです。
まずListに対象範囲の整数をすべて入れて、乱数で指定したインデックスの値を取り出します。
取り出した値を表示した後、その値をリストから削除して同じ値が2回取り出されないようにしています。

[Unity_317×90]

基礎編 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ゲーム開発基礎

実際のリリースゲームを題材にしたハンズオンゲーム制作連載
実践unityゲーム開発

Recent News

Recent Tips

Tag Search