C# Unity: Создание объектов (Instantiate) — Урок 6

Создание C# скрипта

Создайте новый C# скрипт. Разделение функционала на разные скрипты упрощает поддержку и чтение кода. Назовите скрипт CreateObject.

Добавление объекта в Unity и работа с префабами

Откройте созданный скрипт в Visual Studio. Удалите ненужные коллекции и методы. Для создания объекта понадобится переменная типа GameObject. Создайте публичное поле (для видимости в Unity) obj типа GameObject.

Добавьте скрипт на любой объект на сцене (иначе он не будет выполняться). В Unity необходимо указать ссылку не на существующий на сцене объект, а на префаб. Префаб – это объект, перенесенный в папку Prefabs. Любые изменения префаба применяются ко всем объектам, созданным на его основе.

Создайте папку Prefabs. Переместите, например, куб в эту папку. Создайте новый материал (например, «Куб») красного цвета и примените его к префабу. Теперь, создавая объекты на основе этого префаба, они будут иметь нужный цвет и материал.

В скрипте в поле obj укажите префаб из папки Prefabs.

Создание объекта в скрипте

Создайте метод Start. В этом методе будем создавать объекты с помощью метода Instantiate. Он принимает три параметра:

  1. Объект: Префаб, который нужно создать.
  2. Координаты: Vector3, например, Vector3.zero для координат (0, 0, 0). Используйте new Vector3(0, 5, 0) для смещения объекта на 5 единиц вверх по оси Y.
  3. Вращение: Quaternion. Например, Quaternion.Euler(12f, -15f, 40f) для указания вращения.
public GameObject obj;

void Start()
{
    Instantiate(obj, new Vector3(0, 5, 0), Quaternion.Euler(12f, -15f, 40f));
}

Для доступа к созданному объекту, создайте переменную newObj типа GameObject:

GameObject newObj = Instantiate(obj, new Vector3(0, 5, 0), Quaternion.Euler(12f, -15f, 40f)) as GameObject;

Теперь можно обратиться к компонентам созданного объекта, например, к transform:

newObj.transform.position = new Vector3(5, 5, 0);

Создание объектов в цикле со случайными параметрами

Создайте массив obj для хранения различных префабов. Создайте цикл, который будет пять раз создавать объекты. В цикле выбирайте случайный элемент из массива и устанавливайте ему случайные координаты. Функция RandomNumber возвращает случайное число в диапазоне от 0 до 10.

public GameObject[] obj;

void Start()
{
    for (int i = 0; i < 5; i++)
    {
        Instantiate(obj[Random.Range(0, obj.Length)], new Vector3(RandomNumber(), RandomNumber(), RandomNumber()), Quaternion.identity);
    }
}

int RandomNumber()
{
    return Random.Range(0, 11);
}

Метод Instantiate позволяет создавать объекты в Unity из C# скриптов. Он принимает три параметра: объект (префаб), координаты и вращение. Для создания множества объектов с различными параметрами можно использовать циклы и функции для генерации случайных чисел.

Что будем искать? Например,программа