Генерация случайным образом определенного количества префабов разного типа, каждый из которых находится в определенной точке
Есть следующий скрипт:
public class RandomGen: Monobehaviour{
public GameObject[] objects;
void Start(){
int rand = Random.Range(0, objects.Length);
Instantiate(objects[rand], transform.position, Quaternion.identity);
}
}
Он генерирует случайным образом на месте каждой точки(к которой прикреплен этот скрипт), расставленной на сцене в определенной позиции, префаб, который был добавлен в Inspector в поле Objects. Но он не гарантирует, например, что все префабы разного типа будут сгенерированы на месте каждой точки одинаковое количество, например, 5 префабов одного типа и 5 другого если точек на сцене 10. Как это сделать?
Ответы (1 шт):
Автор решения: Pantheon
→ Ссылка
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class sliderturner : MonoBehaviour
{
public GameObject[] objects;//Сюда Inspector тащим объекты
public Vector3[] positions;// Тут В Inspector записываем точки позиции в формает Vector3 (как на картинке у меня)
static void RemoveAt(ref Vector3[] positions, int index)//Эта функция нужна что бы удалять элементы из масива
{
Vector3[] newPositions = new Vector3[positions.Length - 1];
for(int i = 0; i<index; i++)
{
newPositions[i] = positions[i];
}
for(int i = index +1; i <positions.Length;i++)
{
newPositions[i - 1] = positions[i];
}
positions = newPositions;
}
void Start()
{
for (int i = 0; i< objects.Length;i++)
{
for(int j = 0; j<5;j++)//если нужно больше пяти купий каждого объекта поменяй число после j например: for(int j = 0; j<7;j++)
{
GameObject square = (GameObject) Instantiate (objects[i]);
int randomIndex = Random.Range(0,positions.Length);//Получаем рандомное число от 0 до poition.Lenght
Vector3 randomPosition = positions[randomIndex];// Используя рандомное число выбираем рандомную позицию из числа имеющихся
square.transform.position = randomPosition;//назначаем позицию обьекту
RemoveAt(ref positions,randomIndex);//вызываем функцию и удаляем использованное место чтобы не использовать его вновь
}
}
}
