База знаний ЯЮниор
  • C#
    • 🗃️Ссылочные и значимые типы в C# Ключевые слова ref, out, in Что нужно знать новичку
    • 📋Использование констант
    • 🔖Snippet или фрагмент кода
    • 📝Пустые строки
    • 🛡️Инкапсуляция
  • Unity
    • 🚶‍♂️Управление Параметрами Аниматора
    • ⚙️Динамическое изменение объектов
      • 🛠️Создание объектов
      • 🪛Изменение объектов
      • 🪚Добавление и изменение компонентов
      • 🔥Удаление объектов и компонентов
    • 🔊События
      • 🧬Параметризация
      • 🔗Совмещение событий
      • 📡Action и UnityAction
      • 🕹️UnityEvent
    • 🔌Подключение среды разработки к Unity
    • ⌚Корутины
      • 🪄Управление корутинами
      • ⏰Yield Instruction
      • 🕵️‍♂️Как устроены корутины?
  • Git и GitHub
    • 🗃️Git
    • 🗄️GitHub
    • 🖥️GitHub Desktop
Powered by GitBook
On this page
  • Как создавать объекты динамически?
  • Метод Instantiate
  • Перегрузки метода Instantiate

Was this helpful?

  1. Unity
  2. Динамическое изменение объектов

Создание объектов

Автор: Дмитрий Прокопьев

Как создавать объекты динамически?

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

Такой компонент может создавать другие объекты на текущей сцене, так как он сам находится на ней. Для этого используется метод Instantiate.

Важно. Метод Instantiate принадлежит классу MonoBehaviour, поэтому вызывать его можно только из компонента-наследника MonoBehaviour.

Метод Instantiate

Может принимать в себя либо GameObject, либо MonoBehavior:

  1. Если передать GameObject, то метод создаст его копию на текущей сцене и вернёт ссылку на нее с типом GameObject:

[SerializeField] private GameObject _prefab; 
// префаб монеты

private void Spawn()
{
    GameObject copy = Instantiate(_prefab); 
    // копия монеты
}
  1. Если передать MonoBehaviour, то метод создаст копию объекта, которому принадлежит переданный компонент. Затем метод вернёт ссылку на тот же компонент в копии с тем же типом, который был передан.

[SerializeField] private Rigidbody _prefab;
// компонент Rigidbody префаба монеты

private void Spawn()
{
    Rigidbody copy = Instantiate(_prefab); 
    // компонент Rigidbody копии монеты
}

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

public class Coin : MonoBehaviour { }

Позже эти компоненты зачастую перестают быть пустыми, так как выясняется, что требуется дополнительная функциональность. Таким образом, лучше всего хранить ссылку на тот компонент префаба, с которым нам нужно будет работать в копиях.

Перегрузки метода Instantiate

Рассмотрим часто применяемые перегрузки:

  1. Префаб + transform объекта-родителя

Instantiate(_prefab, transform);
  1. Префаб + позиция + поворот

Instantiate(_prefab, transform.position + Vector3.right, Quaternion.identity);
PreviousДинамическое изменение объектовNextИзменение объектов

Last updated 1 year ago

Was this helpful?

Все перегрузки метода Instantiate можно посмотреть .

⚙️
🛠️
здесь