質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

1288閲覧

乱数のシードを設定したあとに、無しにしたい

nankoko

総合スコア20

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/01/21 10:02

乱数のシードを設定した後に、
シードを設定する前の状態 (乱数を固定しない)
に戻す方法はありますか?

UnityEngine.Random.InitState(10);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

シードを再設定する前にRandom.stateを保存しておくというのはどうでしょうかね?
下記のようなコードを試してみましたら...

C#

1using UnityEngine; 2 3public class RandomSeedTest : MonoBehaviour 4{ 5 private void Start() 6 { 7 // ランダムな整数を5個表示 8 for (var i = 0; i < 5; i++) 9 { 10 Debug.Log(Random.Range(0, 100)); 11 } 12 13 // ステートを覚えておく 14 var state = Random.state; 15 16 // シードを変更 17 Random.InitState(123); 18 Debug.Log("Init state"); 19 20 // ランダムな整数を5個表示 21 for (var i = 0; i < 5; i++) 22 { 23 Debug.Log(Random.Range(0, 100)); 24 } 25 26 // ステートを記憶した時点の状態に戻す 27 Random.state = state; 28 Debug.Log("Revert state"); 29 30 // ランダムな整数を5個表示 31 for (var i = 0; i < 5; i++) 32 { 33 Debug.Log(Random.Range(0, 100)); 34 } 35 36 // シードを変更 37 Random.InitState(456); 38 Debug.Log("Init state"); 39 40 // ランダムな整数を5個表示 41 for (var i = 0; i < 5; i++) 42 { 43 Debug.Log(Random.Range(0, 100)); 44 } 45 46 // ステートを記憶した時点の状態に戻す 47 Random.state = state; 48 Debug.Log("Revert state"); 49 50 // ランダムな整数を5個表示 51 for (var i = 0; i < 5; i++) 52 { 53 Debug.Log(Random.Range(0, 100)); 54 } 55 } 56}

Random.stateを戻すと乱数列はそのステートからの続きとなり、下図のように「Revert state」の後には同じ数列が出てきました。

図

投稿2020/01/21 13:47

Bongo

総合スコア10816

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nankoko

2020/01/22 02:40

Bongo様、親切にコードまで書いて頂きありがとうございました。 教えて頂いた方法でバッチリでした! Random.stateを保存しておけることは知りませんでした。 とても勉強になりました。
guest

0

多分、内部的には適当な方法でシードを作っているだけだと思いますが…
なので、現在の時刻等ms単位で得てシードとして突っ込めばいいです

ただ、用途が思い浮かびません
わざわざシードを指定するということは、
前回の乱数と同じ順序で欲しいはずなのですが、
前回のシードがわからないと意味がありません

ですから、自分でシードを指定する必要があるので、
どのシードが指定されたのかわからない初期状態が欲しい意図がわかりません

投稿2020/01/21 10:20

izmktr

総合スコア2856

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問