【发布时间】:2021-11-16 10:39:44
【问题描述】:
我有一种方法可以在每次调用该方法时以某个(随机)角度生成游戏对象。 有时会发生两个GameObject以相同的随机角度通过该方法生成,它们重叠。
我需要避免这种情况,但我不知道该怎么做。
这里是方法的代码:
public Branch CreateBranch()
{
GameObject newBranchGo = new GameObject("Branch");
newBranchGo.transform.position = transform.position;
newBranchGo.transform.parent = transform;
newBranchGo.transform.rotation = transform.rotation;
var angle = tree.GoldenAngle;
if (tree.NumChildren == 1)
{
angle = 0;
//Debug.Log("Angle: " + angle);
newBranchGo.transform.Rotate(angle, 0f, 0f, Space.Self);
}
else
{
if (Random.Range(0f, 1f) < 0.8f)
{
angle = -angle;
}
if (Random.Range(0f, 1f) < 0.5f)
{
newBranchGo.transform.Rotate(angle, 0f, 0f, Space.Self);
}
else
{
newBranchGo.transform.Rotate(0f, angle, 0f, Space.Self);
}
}
Branch branch = newBranchGo.AddComponent<Branch>();
branch.BranchInit(tree, GetComponent<Bud>());
return branch;
}
【问题讨论】:
-
我没有看到你的随机性编码在哪里,但你可以将最后一个角度存储在变量中的某处,在返回分支之前,你可以检查生成的数字是否相同。
-
这里:else { if (Random.Range(0f, 1f)
-
在您的代码中,只有 2 个角度可能(如果
tree.NumChildren != 1):父级angle和GameObject和angle * -1的实际angle。这是您想要的吗? -
var angle = tree.GoldenAngle;中的tree.GoldenAngle;实际上是一个硬编码值:在开始时设置,例如public float GoldenAngle = 30f;该方法每次旋转随机“角度”时都会生成Branch GameObject,但有时会发生这种情况两个连续的方法调用生成相同的随机“角度”,重叠两个新的分支游戏对象 -
Sometimes it happens.. 是的,这是一个随机值,所以确实可能会发生两次类似的值