Рандомно задать значения по списку без повторения

Столкнулся с некоторой проблемой:

Существуют 24 GameObject и 24 Vector3

static public GameObject go1;
static public GameObject go2;
static public GameObject go3;
static public GameObject go4;
static public GameObject go5;
static public GameObject go6;
static public GameObject go7;
static public GameObject go8;
static public GameObject go9;
static public GameObject go10;
static public GameObject go11;
static public GameObject go12;
static public GameObject go13;
static public GameObject go14;
static public GameObject go15;
static public GameObject go16;
static public GameObject go17;
static public GameObject go18;
static public GameObject go19;
static public GameObject go20;
static public GameObject go21;
static public GameObject go22;
static public GameObject go23;
static public GameObject go24;

//

static Vector3 v1 = new Vector3(0, 0, 0);          //1
static Vector3 v2 = new Vector3(100, 0, 0);        //1

static Vector3 v3 = new Vector3(-100, 0, -100);    //2
static Vector3 v4 = new Vector3(0, 0, -100);       //2
static Vector3 v5 = new Vector3(100, -15, -100);   //2
static Vector3 v6 = new Vector3(200, -15, -100);   //2

static Vector3 v7 = new Vector3(-200, -15, -200);  //3
static Vector3 v8 = new Vector3(-100, -15, -200);  //3
static Vector3 v9 = new Vector3(0, -15, -200);     //3
static Vector3 v10 = new Vector3(100, -15, -200);  //3
static Vector3 v11 = new Vector3(200, -15, -200);  //3
static Vector3 v12 = new Vector3(300, -15, -200);  //3

static Vector3 v13 = new Vector3(-200, -15, -300); //4
static Vector3 v14 = new Vector3(-100, -15, -300);   //4
static Vector3 v15 = new Vector3(0, -15, -300);  //4
static Vector3 v16 = new Vector3(100, -15, -300);  //4
static Vector3 v17 = new Vector3(200, -15, -300);  //4
static Vector3 v18 = new Vector3(300, -15, -300);//4

static Vector3 v19 = new Vector3(-100, -15, -400);//5
static Vector3 v20 = new Vector3(0, -15, -400); //5
static Vector3 v21 = new Vector3(100, -15, -400);//5
static Vector3 v22 = new Vector3(200, -15, -400);//5

static Vector3 v23 = new Vector3(0, -15, -500); //6
static Vector3 v24 = new Vector3(100, -15, -500);//6

У меня есть необходимость сделать так, чтобы GameObject-ам по порядку и в рандоме присвоились значения Vector3. Вроде: обжект 1 = вектор 22

обжект 2 = вектор 5

обжект 3 = вектор 16

обжект 4 = вектор 9

Как я могу это сделать?

Я лично пробовал через

 static System.Random _random = new System.Random();

static void Shuffle<T>(T[] array)
{
    int n = array.Length;
    for (int i = 0; i < (n - 1); i++)
    {
        // Use Next on random instance with an argument.
        // ... The argument is an exclusive bound.
        //     So we will not go past the end of the array.
        int r = i + _random.Next(n - i);
        T t = array[r];
        array[r] = array[i];
        array[i] = t;
    }
}
 void Main()
{
    Vector3[] arr = { v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24 };
    Shuffle(arr);
    GameObject[] garr = { go1, go2, go3, go4, go5, go6, go7, go8, go9, go10, go11, go12, go13, go14, go15, go16, go17, go18, go19, go20, go2, go22, go23, go24 };
    Shuffle(garr);
    

        garr.transform.position = transform.position + arr);
}

Но ничего хорошего не вышло. Что я делаю не так?

Если в старте менять значения v1,v2 итд, то всё работает

 void Start()
{

    //расставлено по стокам - нужен рандом

    go1.transform.position = transform.position + v1;
    go2.transform.position = transform.position + v2;
    go3.transform.position = transform.position + v3;
    go4.transform.position = transform.position + v4;
    go5.transform.position = transform.position + v5;
    go6.transform.position = transform.position + v6;
    go7.transform.position = transform.position + v7;
    go8.transform.position = transform.position + v8;
    go9.transform.position = transform.position + v9;
    go10.transform.position = transform.position + v10;
    go11.transform.position = transform.position + v11;
    go12.transform.position = transform.position + v12;
    go13.transform.position = transform.position + v13;
    go14.transform.position = transform.position + v14;
    go15.transform.position = transform.position + v15;
    go16.transform.position = transform.position + v16;
    go17.transform.position = transform.position + v17;
    go18.transform.position = transform.position + v18;
    go19.transform.position = transform.position + v19;
    go20.transform.position = transform.position + v20;
    go21.transform.position = transform.position + v21;
    go22.transform.position = transform.position + v22;
    go23.transform.position = transform.position + v23;
    go24.transform.position = transform.position + v24;
}

Заранее спасибо за ответы


Ответы (1 шт):

Автор решения: Andrew

Итак у нас есть 2 пары входных данных:

GameObject[] arrGo = { go1, go2, go3, go4, go5, go6, go7, go8, go9, go10, go11, go12, go13, go14, go15, go16, go17, go18, go19, go20, go2, go22, go23, go24 };

Vector3[] arrVect = { v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24 };

Shuffle(arrVect); // arrVect уже перемешан в случайном порядке

А так же метод шафл(я его немного переделал под код юнити):

static void Shuffle<T>(T[] array)
{
    int n = array.Length;
    for (int i = 0; i < (n - 1); i++)
    {
        int rndIdx = Random.Range(і, n - i);
        T tmp = array[rndIdx];
        array[r] = array[i];
        array[i] = tmp;
    }
}

дальше просто делаем присвоение тем же способом пример которого написал ты:

for(int i = 0; i < arrGo.Count; i++)
{
    arrGo[i].transform.position = transform.position + arrVect[i];
}

это весь код который необходим.

→ Ссылка