Префабы и 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 посылок — по одной за кадр.
Задание
СреднеСтрелки уже перемещают игрока. При каждом щелчке создавай монету над ним:
- Добавь поле
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 единицы выше игрока
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы скриптинга в Unity
1Ваш первый скрипт
Привет, UnityРазместите кубДвигайте каждый кадрПоворачивайте каждую секундуУправляйте клавишамиПовторение: управляйте кубом2Инспектор
Поля инспектораSerializeFieldЧисла с плавающей точкой и MathfАтрибуты инспектораПовторение: лифт5Преобразования и иерархия
Родители и детиМасштабПосмотри на объектыДвигайся к точкеПовторение: Луна на орбите6Игровые объекты и компоненты
Ссылки в InspectorПолучение компонентаОтсутствующие компонентыДобавление компонентаRequireComponentПоказать и скрытьПовторение: выключатель света9Префабы и создание объектов
Префабы и InstantiateСоздание объектов по таймеруСоздание объектов в сеткеСписки объектовDestroyСлучайное создание объектовПовторение: фейерверки