Как создать объект в Unity: пошаговое руководство для новичков
Создание объектов — основа любой игры в Unity. Без понимания, как формируются GameObject, невозможно двигаться дальше в геймдеве. В этом курсе мы разбираем, как создать объект в Unity, настроить его свойства и управлять им через интерфейс и код на C#.

Вы узнаете, как использовать префабы, компонент Transform, систему Instantiate, а также как оптимизировать создание объектов с помощью пула. Материал подойдёт тем, кто делает первые шаги в Unity и хочет уверенно работать с базовыми элементами движка.
- Основы работы с объектами в Unity
- Создание объектов в Unity
- Настройка объектов в Unity
- Использование Instantiate для создания object во время игры
- Оптимизация создания и управления
- Проблема частого создания и удаления объектов
- Заключение
- Рекомендуем посмотреть курсы по созданию игр на Unity
Основы работы с объектами в Unity
Что такое объекты в Unity?
Знаете, почему разработчики так любят Unity? Потому что здесь всё – абсолютно всё! – является GameObject’ом (и нет, это не преувеличение). Представьте себе игру как большой конструктор, где каждая деталь – от простого куба до сложной системы частиц – это object, который можно создать, настроить и, если что-то пошло не так, безжалостно уничтожить.
В Unity у нас есть целый зоопарк объектов:
- 3D-объекты (кубы, сферы, капсулы – всё то, обо что ваш персонаж будет спотыкаться)
- 2D Sprites и спрайт-объекты (для тех, кто решил, что третье измерение – это перебор)
- Пустые объекты (да-да, иногда пустота тоже функциональна, особенно когда нужно организовать иерархию)
Интерфейс Unity и работа с объектами
А теперь давайте заглянем в «кабину пилота» – интерфейс Unity. Честно говоря, когда я впервые его увидел, то подумал, что случайно запустил программу управления космическим кораблём. Но на самом деле всё логично:
- Hierarchy – это как генеалогическое древо ваших object. Здесь видно, кто кому родитель, а кто чей потомок. И да, семейные отношения в Unity очень важны!
- Scene – это театральная сцена, где все ваши объекты играют свои роли. Здесь вы можете двигать, вращать и масштабировать object, как заправский режиссер.
- Inspector – личное дело каждого объекта, где хранятся все его характеристики, компоненты и скрипты. Что-то вроде медицинской карты, только вместо группы крови – координаты в пространстве.
Кстати, о создании новых object – это можно сделать двумя способами:
- Через меню (правый клик в Hierarchy → Create → выбираем, что душе угодно)
- Программно (для тех, кто предпочитает общаться с Unity на языке C#)
И знаете что? Оба способа одинаково правильные. Это как с кофе – кто-то любит растворимый (быстро и просто), а кто-то предпочитает варить в турке (больше контроля, но нужно знать рецепт). В следующих разделах разберем оба варианта подробнее, чтобы вы могли выбрать свой путь… или использовать оба, как это делаю я.
Создание объектов в Unity
Создание объектов через интерфейс Unity
Знаете, что общего между создателем игр на Unity и шеф-поваром? Оба начинают с базовых ингредиентов! В Unity такими «ингредиентами» являются примитивы – простейшие 3D-object, из которых можно собрать практически что угодно (ну, или хотя бы прототип).

Создание 3D-объекта Cube через интерфейс Unity: достаточно кликнуть правой кнопкой мыши в окне Hierarchy, выбрать пункт «3D Object», а затем — «Cube».
Чтобы создать object через интерфейс (для тех, кто предпочитает работать мышкой, а не печатать код):
- Щелкните правой кнопкой в окне Hierarchy
- Выберите GameObject → 3D Object
- Выберите нужный примитив (и да, куб всегда будет самым популярным выбором – это как пицца «Маргарита» в меню)
Вот небольшая «дегустационная карта» стандартных object:
| Объект | Для чего используется | Особенности |
|---|---|---|
| Cube | Стены, платформы, коробки | Самый универсальный, как швейцарский нож |
| Sphere | Мячи, планеты, снаряды | Идеален для всего круглого (кэп) |
| Capsule | Персонажи, столбы | Когда цилиндр слишком «квадратный» |
| Plane | Земля, пол, вода | Для тех, кому надоело, что объекты падают в бесконечность |
Создание объектов программно с помощью C#
А теперь для любителей писать код (и да, я знаю, что вы существуете). Создавать object программно – это как готовить по рецепту, только вместо грамм и миллилитров у нас строчки кода:
// Создаем пустой объект (как чистый лист)
GameObject emptyObject = new GameObject("Мой крутой объект");
// Создаем примитив (для тех, кому лень делать это мышкой)
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
И знаете что самое интересное? Когда вы создаете object через код, вы получаете гораздо больше контроля над процессом. Хотите создать куб, который появляется точно в центре сцены и сразу начинает вращаться? Пожалуйста:Кстати, забавный факт: создавая object программно, вы делаете ровно то же самое, что делает Unity, когда вы используете интерфейс. Просто в одном случае вы как шеф-повар на кухне, а в другом – как клиент, который просто выбирает из меню. Результат один и тот же, но ощущения совершенно разные!

Программное создание объекта в Unity: код создает 3D-куб, который автоматически появляется в сцене. Это наглядный пример связи между скриптом и визуальным результатом в редакторе.
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube); cube.transform.position = Vector3.zero; // В центр сцены cube.AddComponent(); // Добавляем физику cube.GetComponent().angularVelocity = new Vector3(0, 1, 0); // Крутим!
Важное замечание (основанное на горьком опыте): не увлекайтесь созданием слишком большого количества объектов в одном кадре – Unity этого не любит. Это как пытаться приготовить 100 блюд одновременно – кухня может не выдержать такой нагрузки. Но об этом мы поговорим подробнее в разделе об оптимизации.
Настройка объектов в Unity
Позиция, вращение и масштаб (Transform)
Давайте поговорим о Transform – компоненте, без которого не может существовать ни один object в Unity (серьёзно, попробуйте его удалить – Unity вам этого не позволит). Transform – это как GPS-навигатор для вашего object, только вместо «через 100 метров поверните направо» у нас есть координаты X, Y, Z.
В Inspector это выглядит довольно просто:
- Position (где находится object)
- Rotation (куда он смотрит)
- Scale (насколько он большой или маленький)
Но если вы думаете, что это просто три набора цифр – вы ошибаетесь. За кулисами происходит настоящая математическая магия. Вот как это можно сделать программно:
// Для тех, кто любит точность transform.position = new Vector3(1.0f, 2.0f, 3.0f); // Для тех, кто любит относительность transform.Translate(Vector3.forward * Time.deltaTime); // Для тех, кто любит, когда всё крутится transform.Rotate(Vector3.up * 90f);
Добавление материалов и визуального оформления
Mesh Renderer – это как визажист для ваших объектов. Без него ваш куб будет просто невидимым (что, кстати, иногда тоже полезно). А Materials – это косметичка с текстурами и шейдерами.
// Меняем цвет материала программно (потому что можем) GetComponent().material.color = Color.red; // Или даже так, если хотим быть fancy GetComponent().material.color = new Color(1f, 0f, 0f, 0.5f); // Полупрозрачный красный
Работа с родительскими объектами (Parenting)
А теперь о семейных отношениях в Unity. Когда object становится чьим-то «ребёнком», он наследует трансформации родителя (прямо как в реальной жизни, только с координатами).
Совет от того, кто набил много шишек: всегда думайте дважды перед тем, как менять иерархию объектов во время выполнения игры. Иногда результаты могут быть… неожиданными (как-то раз у меня целый уровень улетел в космос из-за неправильно установленного родителя).
// Усыновляем объект transform.SetParent(parentTransform); // А можно и так, если хотим сохранить мировые координаты transform.SetParent(parentTransform, worldPositionStays: true);
И помните: хорошая организация иерархии объектов – это как хорошая организация кода. Сейчас может казаться, что несколько разбросанных object – это не страшно, но когда их станет сотня… поверьте, вы будете благодарны себе за правильную структуру!
Использование Instantiate для создания object во время игры
Что такое Instantiate?
Знаете, Instantiate — это как копировальный аппарат в мире Unity, только вместо документов он создаёт копии игровых object. И поверьте моему опыту, это одна из тех функций, без которых современный геймдев просто немыслим (попробуйте-ка вручную расставить 1000 монеток на уровне!).
// Базовый пример - самый простой способ клонировать объект
public GameObject prefab;
void CreateObject()
{
GameObject clone = Instantiate(prefab);
}
Как создать объект с Instantiate
Instantiate имеет несколько перегрузок (как говорят умные программисты) или, проще говоря, разных способов использования:
// Самый простой вариант - просто "Сделай мне копию" Instantiate(prefab); // С указанием позиции и поворота - "Сделай копию ВОТ ТУТ" Instantiate(prefab, new Vector3(0, 5, 0), Quaternion.identity); // С родителем - "Сделай копию и положи в этот контейнер" Instantiate(prefab, parentTransform);
Спавн объекта в заданной точке
А теперь самое интересное — как заставить object появляться там, где нам нужно. Например, вот вам код для создания объектов в случайной точке (идеально для генерации предметов или врагов):
public class ObjectSpawner : MonoBehaviour
{
public GameObject prefab;
public float spawnRadius = 10f;
void SpawnRandomObject()
{
// Получаем случайную позицию в круге
Vector2 randomPoint = Random.insideUnitCircle * spawnRadius;
Vector3 spawnPosition = new Vector3(randomPoint.x, 0, randomPoint.y);
// Создаём объект (и молимся, чтобы он не застрял в текстурах)
Instantiate(prefab, spawnPosition, Quaternion.identity);
}
}
Добавление объекта в родителя при создании
Иногда нам нужно, чтобы созданный object сразу попадал в определённую иерархию (например, все пули в контейнер «Bullets», чтобы сцена не превращалась в свалку):
Важное замечание (от того, кто однажды чуть не сломал свой компьютер): когда вы создаёте объект как дочерний, его масштаб и положение будут относительными. То есть, если родительский object повёрнут на 90 градусов и увеличен в два раза, то… ну, вы поняли. Иногда это именно то, что нужно, а иногда — причина многочасовой отладки.
Оптимизация создания и управления
Проблема частого создания и удаления объектов
Знаете, что общего между созданием object в Unity и печатью денег? И то, и другое может привести к инфляции, только в нашем случае – к инфляции производительности. Каждый раз, когда вы вызываете Instantiate или Destroy, Unity приходится выполнять кучу операций под капотом (выделение памяти, инициализация компонентов, обработка физики – и это только начало списка).
public class BulletSpawner : MonoBehaviour
{
public GameObject bulletPrefab;
public Transform bulletsContainer; // Контейнер для пуль
void FireBullet()
{
// Создаём пулю как дочерний объект контейнера
GameObject bullet = Instantiate(bulletPrefab, transform.position, transform.rotation, bulletsContainer);
// Теперь пуля будет наследовать трансформации контейнера
// (что иногда может привести к неожиданным результатам!)
}
}
Представьте, что происходит в игре, где каждую секунду создаются и уничтожаются десятки пуль, частиц или врагов:
// НЕ делайте так (если, конечно, не хотите превратить свою игру в слайд-шоу)
void Update()
{
if(Input.GetButton("Fire"))
{
Instantiate(bulletPrefab);
// Повторить 100 раз в секунду
}
}
Паттерн «пул объектов»
А теперь я расскажу вам о том, как умные разработчики решают эту проблему. Представьте себе бассейн (pool) с object – вместо того, чтобы создавать новый object каждый раз, мы просто берём его из бассейна, а когда он больше не нужен – возвращаем обратно. Гениально в своей простоте, правда?
Вот пример реализации простого пула object:
public class ObjectPool : MonoBehaviour
{
public GameObject prefab;
public int poolSize = 20;
private List pool;
void Start()
{
// Создаём наш "бассейн" object заранее
pool = new List();
for(int i = 0; i < poolSize; i++)
{
GameObject obj = Instantiate(prefab);
obj.SetActive(false); // Прячем объект
pool.Add(obj);
}
}
public GameObject GetObjectFromPool()
{
// Ищем неактивный object в пуле
foreach(GameObject obj in pool)
{
if(!obj.activeInHierarchy)
{
obj.SetActive(true); // "Воскрешаем" объект
return obj;
}
}
// Если свободных объектов нет - можно либо создать новый,
// либо вернуть null, либо подождать... выбор за вами!
Debug.LogWarning("Пул объектов пуст! Возможно, стоит увеличить размер пула?");
return null;
}
public void ReturnObjectToPool(GameObject obj)
{
// Возвращаем объект в пул
obj.SetActive(false);
}
}
Использовать такой пул – одно удовольствие:
void FireBullet()
{
GameObject bullet = objectPool.GetObjectFromPool();
if(bullet != null)
{
bullet.transform.position = transform.position;
bullet.transform.rotation = transform.rotation;
// Теперь пуля летит, а не создаётся с нуля!
}
}
И знаете что самое приятное? Unity настолько полюбила этот паттерн, что начиная с версии 2021 добавила встроенный пул объектов (наконец-то!). Хотя, честно говоря, иногда простая самописная реализация работает не хуже.
Помните: оптимизация – это как диета, лучше начинать заранее, а не когда уже всё совсем плохо. Поверьте человеку, который не раз видел, как игры превращались в PowerPoint презентации из-за неоптимального создания object!
Заключение
Ну что ж, мы с вами прошли путь от простого создания кубика до управления целыми пулами object – и, надеюсь, теперь вы понимаете, что работа с object в Unity это не просто перетаскивание элементов мышкой (хотя, признаюсь, иногда очень хочется, чтобы всё было так просто).
Главное, что нужно запомнить:
Кстати, если вы только начинаете свой путь в Unity и хотите структурированно изучить не только работу с объектами, но и другие аспекты разработки игр на этом движке, обратите внимание на подборку лучших курсов по Unity. Там вы найдете курсы разного уровня сложности, которые помогут вам освоить как базовые, так и продвинутые техники геймдизайна и программирования.
Рекомендуем посмотреть курсы по созданию игр на Unity
| Курс | Школа | Цена | Рассрочка | Длительность | Дата начала | Ссылка на курс |
|---|---|---|---|---|---|---|
|
Разработчик игр на Unity
|
Eduson Academy
76 отзывов
|
Цена
Ещё -13% по промокоду
115 000 ₽
287 496 ₽
|
От
9 583 ₽/мес
11 979 ₽/мес
|
Длительность
6 месяцев
|
Старт
в любое время
|
Ссылка на курс |
|
Unity-разработчик
|
XYZ School
21 отзыв
|
Цена
Ещё -14% по промокоду
176 400 ₽
252 000 ₽
|
От
4 000 ₽/мес
|
Длительность
10 месяцев
|
Старт
11 декабря
|
Ссылка на курс |
|
Разработчик игр на Unity
|
Нетология
44 отзыва
|
Цена
с промокодом kursy-online
102 100 ₽
195 439 ₽
|
От
2 985 ₽/мес
Это кредит в банке без %. Но в некоторых курсах стоимость считается от полной цены курса, без скидки. Соответственно возможно все равно будет переплата. Уточняйте этот момент у менеджеров школы.
|
Длительность
6.5 месяцев
|
Старт
15 декабря
|
Ссылка на курс |
|
Разработчик игр на Unity с нуля
|
Skillbox
191 отзыв
|
Цена
Ещё -20% по промокоду
114 505 ₽
229 011 ₽
|
От
4 771 ₽/мес
Без переплат на 2 года.
|
Длительность
3 месяца
|
Старт
5 декабря
|
Ссылка на курс |
|
Разработчик игр на Unity. Продвинутый уровень
|
Otus
76 отзывов
|
Цена
93 600 ₽
104 000 ₽
|
От
9 360 ₽/мес
|
Длительность
4 месяца
|
Старт
1 марта
|
Ссылка на курс |
Основные правила русского языка: простое объяснение и примеры
Хотите наконец системно разобраться во всех правилах русского языка и перестать путаться в приставках, мягких знаках и спряжениях? В этой статье вы найдете понятные объяснения, примеры и приемы для уверенного владения орфографией.
Хостинг — что это такое, как он работает и какой выбрать для сайта
Вы тоже думали, что хостинг — это нечто для программистов? На самом деле всё проще: разберёмся, зачем он нужен, какие бывают виды и как понять, какой подойдёт именно вам.
CSRF-угрозы в PHP: Как защититься и спать спокойно
Знаете ли вы, что ваш браузер может работать против вас? Кросс-сайт запросы (CSRF) угрожают безопасности данных. Мы объясним, как защитить ваши приложения на PHP.
Валидация и верификация в тестировании: понятия, отличия и примеры
Что проверяет каждый из этих процессов, почему оба важны и как они помогают создавать действительно качественные ИТ-продукты? Раскладываем всё по полочкам.