【发布时间】:2018-09-21 13:47:06
【问题描述】:
我正在寻找一种在特定地图坐标处的两个范围之间选择随机数的好方法,该随机数总是基于该坐标返回相同的数字。
在上下文中,我有一个地图生成器,它使用 perlin 噪声来构建它,放置水、草、岩石等,效果很好,但是每个图块都可以有替代纹理,例如,草图块可能有 5 个替代纹理它可以使用。我希望能够完全随机地生成其中一个,但它需要在每次播放时保持一致,并且不使用 perlin 噪声,因为这通常会产生流动(一个纹理的几个,然后是下一个纹理的几个等)
值得注意的是,我不能只为此设置一个随机种子,因为世界的那一部分可以随时生成,而不是按特定顺序。
我尝试了类似以下的方法:
public static int PerlinNoiseCalcInt(float x, float y, float size, float power, int min, int max) {
int f = Mathf.RoundToInt(Mathf.PerlinNoise(x / size * power, y / size * power) * max + min);
return f < max ? f : max--;
}
这种作品,但正如您可能期望的那样,它给出了一堆一个纹理,然后是一堆另一个,我真的希望它看起来非常随机,但每次在那个地图位置每次都一样.
【问题讨论】:
-
您是否尝试过根据地图坐标设计一个独特的种子?相同坐标具有相同种子应该始终产生相同的伪随机结果。
-
你也可以看看椭圆曲线之类的东西吗?我不确定这是否可行,因此不是答案。
-
我不能使用 Unity 的 Random.seed,因为它是在线程上运行的,是否有替代方案?每次初始化 System.Random 都相当费力。