Unity создает объекты с помощью скриптов

Введение. В игровом дизайне все объекты, которые необходимо использовать, можно разместить в сцене с помощью редактора. Но часто невозможно заранее создать все необходимые объекты, такие как пули, созданные монстры и тому подобное. Они либо создаются в любое время в зависимости от действий игрока, либо в определенные моменты в зависимости от игрового процесса, и нет возможности заранее определить, когда они появятся.

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


1. Сборные

Prefab — это шаблон объекта. При разработке игр объекты обычно задаются как prefab. Подробнее см. в этой статье: Начало работы с Unity

2. Создайте объекты

Для создания объектов с помощью префабов вам нужно использовать метод создания экземпляров Instantiate(). Он принимает ссылку на префаб в качестве шаблона, а возвращаемое значение всегда является ссылкой на вновь созданный объект. Если префаб передается как тип GameObject, возвращаемый результат также является типом GameObject.

В реальном использовании иногда необходимо указать положение, ориентацию и родительский объект вновь созданного объекта, поэтому метод Intantiate() также имеет несколько перегруженных форм, разница в том, что параметры разные. Здесь показаны три перегруженные формы

перегруженная форма

параметр 1

параметр 2

параметр 3

параметр 4

Укажите только родительский объект

сборный

Тип Transform родительского объекта, null означает отсутствие родительского объекта, размещенного в корневом узле сцены.

 

 

Укажите местоположение и ориентацию

сборный

Пространственное положение, мировая система координат, тип Vector3

Ориентация, тип кватерниона

 

указать позицию, ориентацию и родителя

сборный

Пространственное положение, мировая система координат, тип Vector3

Ориентация, тип кватерниона

Тип Transform родительского объекта, null означает отсутствие родительского объекта, размещенного в корневом узле сцены.

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

Вот пример создания объекта скриптом

с помощью UnityEngine;

 

открытый класс TestInstantiate: MonoBehaviour

{

     общедоступный префаб GameObject;//устанавливаем общедоступный для назначения в редакторе

     пустое начало ()

     {

       GameObject objA=Instantiate(prefab,null);//Создаем объект в корневом узле сцены

       GameObject objB=Instantiate(prefab,transform);//Создаем объект как подобъект объекта, где находится текущий скрипт

       GameObject objC=Instantiate(prefab,new Vecrtor3(3,0,3),Quaternion.identity);//Создаем объект, определяем положение и ориентацию

     }

}

Использование сценариев для создания объектов также используется, когда необходимо разместить точную графику.Ниже приведен пример использования сценариев для создания 10 объектов и размещения их в круге.

с помощью UnityEngine;

 

открытый класс TestInstantiate: MonoBehaviour

{

     публичный префаб GameObject;

     пустое начало ()

     {

         для (целое я = 0; я <10; я ++)

        {

          Vector3 pos=new Vector3(Mathf.Cos(i*(2*Mathf.PI)/10),0,Mathf.Sin(i*(2*Mathf.PI)/10);//использовал sin и cos в определении в системе координат ху

          поз=поз*5;//радиус=5

         Instantiate(prefab,pos,Quaternion.identity);

       }

     }

}

3. Создайте компоненты

Обычно используется метод GameObject.AddComponent(), следующий код сначала получает объект Cube, а затем добавляет к нему компонент Rigidbody

с помощью UnityEngine;

 

открытый класс TestInstantiate: MonoBehaviour

{

     пустое начало ()

     {

        GameObject go=GameObject.Find("Куб");

         go.AddComponent<Rigidbody>();

     }

}

4. Разрушение объектов или компонентов

Объекты или компоненты могут быть уничтожены с помощью метода Destroy(), поэтому примеры здесь не будут расширяться.

Но здесь важно отметить: после выполнения операции Destroy объект не будет уничтожен сразу, а будет уничтожен в подходящее время позже. Это гарантирует, что в этом кадре работа объекта не вызовет ошибок.

В отдельных случаях, если требуется немедленное уничтожение, Unity предоставляет метод DestroyImmediate().

5. Регулярно создавайте и уничтожайте объекты

Отложенное создание объектов и отложенное уничтожение объектов — обычные требования в играх.

Отложенное создание обычно используется для ожидания окончания анимации и регулярного обновления монстров. Отложенное уничтожение объектов используется для того, чтобы пули и трупы исчезали через равные промежутки времени.

Задержки должны быть точно рассчитаны по времени, например, выполнение в секундах в будущем. Вот пример простого метода Invoke. Этот метод имеет два параметра, первый параметр — это имя метода, представленное в виде строки, а второй параметр представляет отложенное событие в секундах.

Метод Invoke может задерживать вызов метода, но требует, чтобы метод не имел параметров и возвращаемого значения.

В следующем примере метод Invoke используется для записи динамического эффекта, который генерирует объект каждые 0,5 секунды.

Использование UnityEngine;

открытый класс TestInvoke: MonoBehaviour

{

   общедоступный префаб Gameobject;

   целочисленный счетчик=0;

   пустое начало ()

   {

     Вызов ("Создать префаб", 0.5f);

   }

   аннулировать CreatPfab()

   {

         Vector3 POs=new Vector3(Mathf.Cos(счетчик*(2*Mathf.PI)/10),0,Mathf.Sin(счетчик*(2*Mathf.PI)/10));

          позиция*=5;

          Instantiate(prefab,pos,Quaternion.identity);

          счетчик++;

          если(счетчик<10)

          {

          Вызов ("Создать префаб", 0.5f);

          }

    }

}

Отложенное уничтожение также может быть реализовано с помощью Invoke, но поскольку требования к отложенному уничтожению более требовательны, Unity добавляет функцию задержки в метод Destroy.Второй параметр Destroy используется для указания события отложенного уничтожения, например:

Уничтожить (куб, 0,5f);

 

Guess you like

Origin blog.csdn.net/m0_63024355/article/details/130541359