为什么Random.Range与Unity中列表中的按钮位置重叠?

时间:2019-04-15 08:22:29

标签: c# unity3d random position

我有一个UI Buttons和Vector2位置列表。每次加载按钮时,我都会使用random.range随机放置按钮。但是它永远不会显示所有5个按钮在不同位置。而是重叠其中的一些。有人可以帮我吗?

X[i,] = data_dict[ID]

2 个答案:

答案 0 :(得分:0)

尝试使用此代码,不确定您的Random.Range()函数来自何处,但是System中有一个内置的Random,可用于获取随机整数。 在此示例中,将随机声明为随机数,然后使用Next()函数获取随机数:

void Shuffle()
{
    System.Random random = new System.Random();
    for (int i = 0; i < positions.Count; i++)
    {
        int rnd = random.Next(0, positions.Count);
        Vector2 tempGO = positions[rnd];
        positions[rnd] = positions[i];
        positions[i] = tempGO;
    }
}

答案 1 :(得分:0)

执行此操作时:

int randomIndex = Random.Range(0, positions.Count);

answersButtons[i].transform.position = positions[randomIndex];

可能在随机化时会得到相同的值,这就是某些按钮重叠的原因。

您想要:

  • 随机排列职位列表(您做了什么),并保持答案列表的顺序相同

  • 随机排列答案列表,并保持排名相同的顺序

尝试以下方法:

void ShuffleAnswersList()
{             
    //  Notice this v--------------------v to avoid out of range exception
    for (int i = 0; i < positions.Count && i < answersButtons.Count; i++)
    {
// always use i ------V---------------------------------V
       answersButtons[i].transform.position = positions[i];
    }
}

当然,请确保首先调用方法Shuffle。此方法需要修复,Random.Range(min, max)可能返回max(并提供超出范围的异常)

// shuffle positions
public void Shuffle()
{
    for (int i = 0; i < positions.Count; i++)
    {
// notice this -------------------------------------V
        int rnd = Random.Range(0, positions.Count - 1);
        Vector2 tempGO = positions[rnd];
        positions[rnd] = positions[i];
        positions[i] = tempGO;
    }
}