【发布时间】:2016-09-27 08:24:46
【问题描述】:
我将如何创建一个非均匀随机生成的游戏对象(敌人),以模仿如下图所示的“部落”的形成:
我希望在前面有更多的游戏对象,而在后面逐渐减少。我想制作一个 Empty gameObject 并使用如下代码让敌人瞄准:
public Vector3 target : Transform;
if (target == null && GameObject.FindWithTag("Empty"))
{
target = GameObject.FindWithTag("Empty").transform;
}
但是,这样做不会给我带来后面的 int 较少的“跟踪”效果。
这是我随机生成敌人的代码,如果有帮助的话:
void SpawnHorde()
{
for (int i = 0; i < hordeCount; i++)
{
Vector3 spawnPosition = new Vector3(Random.Range (0, 200), 50, Random.Range (0, 200));
Instantiate(Resources.Load ("Prefabs/Sphere"), spawnPosition, Quaternion.identity);
}
}
有人对如何实现这一点有建议吗?
我实现@Jerry 的代码后的结果:
更集中在前面;少在后面:)
【问题讨论】:
-
如果你把上面的图像放在一个X-Y轴系统中,你可以从左到右逐步遍历X坐标,并且有一个函数可以告诉每个X坐标或偏移多少敌人沿 Y 线随机生成。例如,在
X=0随机生成 10 个敌人,然后在X=1生成 7 个,等等。类似指数衰减 (e^(-x)) 或线性衰减 (-ax + b),可能是二次的?随着 X 坐标的进展,您越能以数学方式描述 Y 线上的敌人数量,您获得的结果就越好。 -
Random 在该范围内生成一个随机数,并且通常在该范围内随着时间的推移非常均匀地分布。您真的希望能够设置随机数的均值和标准分布。我会查看this question,因为答案显示了如何为您的 x 轴值创建这种类型的分布。
-
如果你想要一些灵感,你可以使用两个线性函数(这里是
y = -2x + 100和y = 2x - 100),它给出了你想要的敌人 y 位置的上下边界如果x = 0 to x = 50则生成。这给了你想要的那条漂亮的“小径”。现在结合起来,较低的 x 值意味着产生更多的敌人,而较高的 x 值意味着产生更少的敌人(线性 lerping?;)),你就有了敌人的踪迹。 (i.stack.imgur.com/FpdOd.png) -
@MaximilianGerhardt 感谢您的快速回复,这是个好主意,谢谢。我会尝试一下,看看我想出了什么。啊,我直到现在才看到你的新回复。我要向 Lithium 提到,我实际上可以在方程中使用系统时间来获得我想要的结果。但是哇,谢谢你花时间找到一个方程和一切。实际上这似乎更容易
标签: c# unity3d random unity5 non-uniform-distribution