Tips

【Unity】練習問題 8

【Unity】練習問題 8

Unity練習問題 8


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

問題


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

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

using UnityEngine;

public class Practice_08 : MonoBehaviour {

	int a, b, c, d;

	void Start() {
		Random.State state1 = Random.state;
		Debug.Log(Random.Range(1, 100));
		Debug.Log(Random.Range(1, 100));
		Debug.Log(Random.Range(1, 100));
		Debug.Log(Random.Range(1, 100));

		Random.State state2 = Random.state;
		Debug.Log(Random.Range(1, 100));
		Debug.Log(Random.Range(1, 100));

		Random.state = state1;
		a = Random.Range(1, 100);
		b = Random.Range(1, 100);

		Random.state = state2;
		c = Random.Range(1, 100);
		d = Random.Range(1, 100);
	}
}
  1. 「a = 53, b = 74, c = 77, d = 5」
  2. 「a = 53, b = 74, c = 13, d = 87」
  3. 「a = 77, b = 5,   c = 13, d = 87」
  4. 「a = 13, b = 87, c = 77, d = 5」
  5. 「a = 13, b = 87, c = 53, d = 74」

解答


解答を見る

2

解説


解説を見る

Random.stateは、ランダムクラスの乱数生成状態(ステータス)のプロパティで、戻り値はRandom.State型です。
Randomクラスには、Stateという構造体が定義されており、その値をこのプロパティで取得・変更ができます。
乱数の生成前にstateの値をgetしておけば、必要なタイミングでRandom.stateプロパティにsetすることで、同じ生成パターンで乱数を作ることができます。

本題では、Random.State型の変数「state1」に、乱数生成前のステートを取得した後、Randomクラスを利用しています。
4回利用後、再度「state2」の変数にステートを取得した後、再びRandomクラスを2回利用しました。

state1をセットすると、Random.Range(1, 100)をコールすれば、4回目までの値は必ず「53、74、77、5」となります。
state2をセットすると、Random.Range(1, 100)をコールすれば、2回目までの値は必ず「13、87」となります。

state1セットしてRandomクラスを2回、state2セットしてRandomクラスを2回、乱数を生成しているため、正解は2番となります。

使用上の注意
Random.stateで取得できる状態は、シーン再生ごとに異なります。
シーン1回再生中に同じ条件で乱数を発生させる場合に使用しましょう。
毎回同じ乱数にしたければRandom.InitStateを使用しましょう。

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

[Unity_317×90]

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

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

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

Recent News

Recent Tips

Tag Search