Tips

【Unity】練習問題 7

【Unity】練習問題 7

Unity練習問題 7


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

問題


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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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