Генерация случайным образом определенного количества префабов разного типа, каждый из которых находится в определенной точке

Есть следующий скрипт:

 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);//вызываем функцию и удаляем использованное место чтобы не использовать его вновь
            
                
           }
       }
    }

} введите сюда описание изображения

→ Ссылка