Учебники

Понимание Prefabs и Instantiation

Создание и уничтожение объектов считается очень важным во время игры. Создание просто означает возникновение. Предметы появляются или «появляются» в игре, враги умирают, элементы графического интерфейса исчезают и сцены постоянно загружаются в игре. Знание того, как правильно избавляться от ненужных предметов и как вводить те, которые вы делаете, становится еще более важным.

Давайте сначала разберемся, что такое сборные . Сборные считаются важными для понимания того, как работает Instantiation в Unity.

Префабы похожи на чертежи GameObject. Префабы – это, в некотором смысле, копия GameObject, которая может быть продублирована и помещена в сцену, даже если она не существовала на момент создания сцены; другими словами, префабы могут быть использованы для динамической генерации объектов GameObject .

Чтобы создать префаб, вам просто нужно перетащить нужный GameObject из вашей иерархии сцены в проект Assets .

Создание сборных

Теперь, чтобы создать экземпляр GameObject, мы вызываем метод Instantiate () в нашем скрипте. Этот метод, определенный в MonoBehaviour , принимает GameObject в качестве параметра, поэтому он знает, какой GameObject создать / продублировать. Он также имеет различные переопределения для изменения преобразования нового экземпляра объекта, а также для родительских функций.

Давайте попробуем создать новый шестиугольник при каждом нажатии клавиши пробела.

Создайте новый скрипт под названием Instantiator и откройте его. В методе обновления введите код, указанный ниже.

Здесь мы используем метод GetKeyDown класса Input, чтобы проверить, нажимал ли игрок определенную кнопку во время последнего кадра. Поскольку мы хотим, чтобы он продолжал проверять, мы помещаем его в обновление , которое выполняется 60 раз в секунду. Метод GetKeyDown возвращает true, если в этом кадре нажата клавиша, указанная в перечислении KeyCode (в котором перечислены все возможные клавиши на стандартной клавиатуре).

public class Instantiator : MonoBehaviour {
   public GameObject Hexagon;
   // Update is called once per frame
   void Update () {
      if (Input.GetKeyDown(KeyCode.Space)) {
         Instantiate(Hexagon);
      }
   }
}

Публичное объявление GameObject вверху создает слот, похожий на тот, который мы сделали для Rigidbody2D в наших предыдущих уроках. Однако этот слот принимает только префабы (во время редактирования ) и gameObjects (во время выполнения).

Сохраните скрипт и дайте ему скомпилироваться. Как только это будет сделано, создайте новый пустой GameObject, перейдя в контекстное меню иерархии объектов и выбрав Create Empty .

Создать пустой

Назовите этот объект как-нибудь узнаваемым, например, объект Instatiator, и присоедините к нему наш новый скрипт. В слот, который отображается для GameObject, перетащите созданный нами сборный дом.

Инстайлятор Объект

Если мы запустим игру сейчас, нажатие пробела создаст новый объект Hexagon, идентичный тому, который мы использовали для создания префаба. Вы можете видеть каждый шестиугольник, создаваемый в иерархии объектов. Причина, по которой вы не видите их в игре, заключается в том, что на данный момент все они создаются точно один над другим.

Шестигранный объект

На нашем следующем уроке мы поймем концепцию разрушения объекта.