Menu
CoddyTech

Префабы и Instantiate

Часть раздела Основы скриптинга в Unity путешествия по Unity на Coddy. Урок 48 из 67.

Префаб — это GameObject, сохранённый в качестве шаблона: перетащи объект из Hierarchy в окно Project, и Unity сохранит его со всеми компонентами и значениями из Inspector. Сам префаб не находится в сцене. Скрипт получает его через поле, как и любую другую ссылку: объяви public GameObject parcelPrefab; и перетащи префаб на это поле в Inspector.

Instantiate(prefab, position, rotation) создаёт копию префаба в сцене и возвращает её. Этот дрон-доставщик сбрасывает посылку в своей позиции при каждом нажатии Space. Quaternion.identity означает отсутствие вращения:

public GameObject parcelPrefab;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        Instantiate(parcelPrefab, transform.position, Quaternion.identity);
    }
}

Каждое нажатие добавляет ещё один объект в Hierarchy с именем Parcel(Clone). Префаб остаётся неизменным, поэтому каждая копия начинает с одинаковыми значениями. Здесь важен GetKeyDown: с GetKey удерживание Space в течение половины секунды привело бы к сбросу примерно 30 посылок — по одной за кадр.

challenge icon

Задание

Средне

Стрелки уже перемещают игрока. При каждом щелчке создавай монету над ним:

  • Добавь поле GameObject с модификатором public и именем coinPrefab. Как только поле появится, сцена поместит в него префаб Coin.
  • При щелчке левой кнопкой мыши создавай одну копию монеты на 2 единицы выше игрока, без поворота.

Нажми Играть, подвигайся и несколько раз щёлкни мышью, затем нажми Проверить.

Попробуйте сами

using UnityEngine;

public class CoinDropper : MonoBehaviour
{
    public float speed = 4f;
    // coinPrefab: публичное поле GameObject, которому назначен префаб Coin

    void Update()
    {
        if (Input.GetKey(KeyCode.RightArrow))
        {
            transform.position += new Vector3(speed * Time.deltaTime, 0, 0);
        }
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            transform.position -= new Vector3(speed * Time.deltaTime, 0, 0);
        }

        // Click: создать монету на 2 единицы выше игрока
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы скриптинга в Unity