Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么是随机的。范围是从列表中重叠的按钮位置的统一?_C#_Unity3d_Random_Position - Fatal编程技术网

C# 为什么是随机的。范围是从列表中重叠的按钮位置的统一?

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

我有一个UI按钮列表和位置矢量2。我使用random.range在每次加载按钮时随机放置它们。但它从不在不同位置显示所有5个按钮。而不是重叠其中的一些。有人能帮我吗

[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()
?但如何删除重复的随机索引呢?请