C# 为什么是随机的。范围是从列表中重叠的按钮位置的统一?
我有一个UI按钮列表和位置矢量2。我使用random.range在每次加载按钮时随机放置它们。但它从不在不同位置显示所有5个按钮。而不是重叠其中的一些。有人能帮我吗C# 为什么是随机的。范围是从列表中重叠的按钮位置的统一?,c#,unity3d,random,position,C#,Unity3d,Random,Position,我有一个UI按钮列表和位置矢量2。我使用random.range在每次加载按钮时随机放置它们。但它从不在不同位置显示所有5个按钮。而不是重叠其中的一些。有人能帮我吗 [SerializeField] List<Button> answersButtons = new List<Button>(); [SerializeField] List<Vector2> positions = new List<Vector2>(); void Shuffl
[SerializeField] List<Button> answersButtons = new List<Button>();
[SerializeField] List<Vector2> positions = new List<Vector2>();
void ShuffleAnswersList()
{
for (int i = 0; i < answersButtons.Count; i++)
{
Vector2 tempPosition =
answersButtons[i].GetComponent<RectTransform>().position;
int randomIndex = Random.Range(0, positions.Count);
answersButtons[i].transform.position = positions[randomIndex];
answersButtons[randomIndex].GetComponent<RectTransform>().position
= tempPosition;
Debug.Log(randomIndex);
}
}
// shuffle positions
public void Shuffle()
{
for (int i = 0; i < positions.Count; i++)
{
int rnd = Random.Range(0, positions.Count);
Vector2 tempGO = positions[rnd];
positions[rnd] = positions[i];
positions[i] = tempGO;
}
}
[SerializeField]列表应答按钮=新列表();
[SerializeField]列表位置=新列表();
void ShuffleAnswersList()
{
for(int i=0;i
试试这段代码,不确定Random.Range()函数来自哪里,但是系统中有一个内置的Random,可以用来获取随机整数。
在本例中,前面声明了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;
}
}
void Shuffle()
{
System.Random Random=新的System.Random();
对于(int i=0;i
试试这段代码,不确定Random.Range()函数来自哪里,但是系统中有一个内置的Random,可以用来获取随机整数。
在本例中,前面声明了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;
}
}
void Shuffle()
{
System.Random Random=新的System.Random();
对于(int i=0;i
执行此操作时:
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];
}
}
进行此操作时:
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];
}
}
我是否需要使用任何特定的名称空间来使用random.next,因为它下面显示红线灯泡说什么?默认情况下应在项目中(编辑答案)Random不包含的定义Next@DenisSchaf:Unity3d有自己的类。@Cid ok我明白了,但为什么默认值不起作用@Sarita添加系统。
在random前面我是否需要使用任何特定的名称空间来使用random。下一步,因为它下面显示红线灯泡说什么?默认情况下应在项目中(编辑答案)Random不包含的定义Next@DenisSchaf:Unity3d有自己的类。@Cid ok我明白了,但为什么默认值不起作用@Sarita在随机列表前面添加系统。
这样做是因为我正在洗牌这两个列表吗?我正在按照你说的进行更改。你是说Shuffle
应该返回~max~值吗?我更改了这两个函数。现在,只有位置列表元素是随机的,应答按钮列表元素的顺序是正常的0-4。但是屏幕上没有出现一个按钮。是的,Random.Range
可以返回最大值,考虑到Ah,我可能忘记了一些东西,删除了太多的东西。我可能只保留shuffleaswerslist()
函数并删除Shuffle()
?但如何删除重复的随机索引呢?请问发生这种情况是因为我正在洗牌这两个列表吗?我正在按照你说的进行更改。你是说Shuffle
应该返回~max~值吗?我更改了这两个函数。现在,只有位置列表元素是随机的,应答按钮列表元素的顺序是正常的0-4。但是屏幕上没有出现一个按钮。是的,Random.Range
可以返回最大值,考虑到Ah,我可能忘记了一些东西,删除了太多的东西。我可能只保留shuffleaswerslist()
函数并删除Shuffle()
?但如何删除重复的随机索引呢?请