Префабы и Instantiate
Часть раздела Основы скриптинга в Unity путешествия по Unity на Coddy. Урок 62 из 85.
Префаб — это 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 посылок — по одной за кадр.
Задание
СреднеСделай так, чтобы при каждом щелчке над игроком появлялась монета.
- Добавь поле
public GameObject coinPrefab;. Сцена заполнит его префабом Coin. - В
Update()приInput.GetMouseButtonDown(0)вызовиInstantiate(coinPrefab, transform.position + new Vector3(0, 2, 0), Quaternion.identity);.
Нажми «Играть», двигайся и щёлкай: каждый раз над игроком будет появляться монета. Затем нажми «Проверить».
Попробуйте сами
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Основы C# в Unity
Привет, UnityПеременныеДля дробных чисел нужна fТекст в консолиПеременные, которые запоминаютЕсли и иначеСравнение чиселПовторение: сборщик монет7Циклы и методы
Повторение с forЦиклы внутри цикловНапишите методМетоды, которые возвращают значениеМассивыПовторение: лестница10Поиск объектов
Поиск по имениТегиПоиск по типуСсылки лучше поискаNull в UnityПовторение: ближайшая монета13Проект: уворачиваемся от блоков
БегунБлоки с неба2Заставь двигаться
Размести кубДвигай каждый кадрПоворачивай каждую секундуУправляй клавишамиПовторение: веди куб5Векторы
Сложение векторовНаправленияЛокальное и мировое пространствоСкорость по диагоналиРасстояние между объектамиVector3 — это структураПовторение: пилот дрона8Игровые объекты и компоненты
Ссылки в InspectorПолучение компонентаОтсутствующие компонентыДобавление компонентаRequireComponentПоказ и скрытиеПовторение: выключатель света11Префабы и создание объектов
Префабы и InstantiateСпавн по таймеруСпавн в сеткеСписки объектовУбрать последний созданныйDestroyСлучайный спавнПовторение: фейерверкиПотренируйтесь самостоятельно: Песочница Unity