【发布时间】:2018-03-18 00:16:30
【问题描述】:
我正在尝试实现类似两种状态的随机数生成
例如,一个带有种子的实例和另一个带有默认随机性的实例:
UnityEngine.Random.InitState(255);
我需要这个,因为我有 my_game 的一部分作为多人游戏与 game_a 和 my_game 有一些额外的功能,也使用随机性。
我怎样才能做到这一点?
【问题讨论】:
我正在尝试实现类似两种状态的随机数生成
例如,一个带有种子的实例和另一个带有默认随机性的实例:
UnityEngine.Random.InitState(255);
我需要这个,因为我有 my_game 的一部分作为多人游戏与 game_a 和 my_game 有一些额外的功能,也使用随机性。
我怎样才能做到这一点?
【问题讨论】:
使用此处记录的 Random 类的实例:https://msdn.microsoft.com/en-us/library/ctssatww(v=vs.110).aspx
using System;
using System.Threading;
public class Example
{
public static void Main()
{
Random rand1 = new Random((int) DateTime.Now.Ticks & 0x0000FFFF);
Random rand2 = new Random((int) DateTime.Now.Ticks & 0x0000FFFF);
Thread.Sleep(20);
Random rand3 = new Random((int) DateTime.Now.Ticks & 0x0000FFFF);
ShowRandomNumbers(rand1);
ShowRandomNumbers(rand2);
ShowRandomNumbers(rand3);
}
private static void ShowRandomNumbers(Random rand)
{
Console.WriteLine();
byte[] values = new byte[4];
rand.NextBytes(values);
foreach (var value in values)
Console.Write("{0, 5}", value);
Console.WriteLine();
}
}
【讨论】:
您可以使用 Random 类的两个实例。
定义要使用 System.Random 而不是 UnityEngine.Random:
using RNG = System.Random;
然后
RNG rand1 = new RNG();
RNG rand2 = new RNG(5);
第一个将使用取决于游戏开始时间的种子,因此它总是不同的。 第二个有一个固定的种子,应该总是产生相同的随机数序列
编辑以显示 C# Random 优于 UnityEngine Random 的用法
【讨论】:
UnityEngine.Random 定义两个单独的种子定义你想使用System.Random:using RNG = System.Random;,然后你可以使用我的建议:RNG rand1 = new RNG(); RNG rand2 = new RNG(5);