我有一个UI Buttons和Vector2位置列表。每次加载按钮时,我都会使用random.range随机放置按钮。但是它永远不会显示所有5个按钮在不同位置。而是重叠其中的一些。有人可以帮我吗?
X[i,] = data_dict[ID]
答案 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;
}
}