Tips

【Unity】練習問題 7

【Unity】練習問題 7

Unity練習問題 7


UnityのエディターやC#スクリプトのオリジナル練習問題を出題していきます。
第7問は乱数に関する問題です。
※使用しているUnityのバージョンは5.5.2f1です。

問題


Consoleに下図のログが出力された。

ヒエラルキーに配置したゲームオブジェクトには、下記のスクリプトのみ1つだけアタッチしてある。
Startメソッド終了時に、変数a,b,cに代入されている値として正しい組合せを1つ、選択肢から選びなさい。
※ただし、シーン内で他のスクリプトは動作していないものとする。

using UnityEngine;

public class Practice_07 : MonoBehaviour {

	int a, b, c;

	void Start() {
		Random.InitState(50);
		Debug.Log(Random.Range(1, 100));
		Debug.Log(Random.Range(1, 100));
		Debug.Log(Random.Range(1, 100));

		Random.InitState(50);
		a = Random.Range(1, 100);
		b = Random.Range(1, 100);
		c = Random.Range(1, 100);
	}
}
  1. 「a = 35, b = 14, c = 99」
  2. 「a = 1, b = 2, c = 3」
  3. 「a = 100, b = 100, c = 100」
  4. 「a = 50, b = 51, c = 52」
  5. 「a = 36, b = 15, c = 100」

解答


解答を見る

1

解説


解説を見る

Random.InitState()は、乱数生成するためのRandomクラスを初期化するメソッドです。
引数に整数値を指定することで、乱数の生成パターンを固定することができます。

本題では、Random.InitState(50)で初期化後、Random.Range(1, 100)で「35, 14, 99」の整数値が順番に生成されています。
Random.InitState(50)で初期化を行えば、その直後3回のRandom.Range(1, 100)の結果は、値と順序共に必ず同じであると判断できるため、正解は1番となります。

使用上の注意

生成パターンの固定は、Randomクラスへの参照順できまります。
別の処理や他のスクリプトでRandomクラスを利用している場合、これらの処理に割り込まれると乱数はズレます。

【例】

[csharp] void Start() {
Random.InitState(50);
Debug.Log(Random.Range(1, 100));
Debug.Log(Random.value);
Debug.Log(Random.Range(1, 100));
Debug.Log(Random.Range(1, 100));
}
[/csharp]

下図が上記の出力結果です。

Random.Range(1, 100)であれば14となるはずの乱数は、Random.valueで使われてしまったため、2度目のRandom.Range(1, 100)の結果が99になっています。

【補足】

以前は「Random.seed = 50」という形で、seedという変数にパターン整数を代入して初期化していましたが、こちらは旧型式となりました。
Random.seedに取って代わったものが、Random.InitState()です。

<<  < 次の問題  前の問題 > >>

[Unity_317×90]

ゲーム制作関連のオススメ連載リンク

とっても手軽なゲーム制作体験!
Unityゲーム開発基礎

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

Recent News

Recent Tips

Tag Search