Рандомно задать значения по списку без повторения
Столкнулся с некоторой проблемой:
Существуют 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];
}
это весь код который необходим.