🔥 Что такое GameObject в Unity? | Часть 1
GameObject — это фундаментальный строительный блок любой сцены в Unity.
📌 Проще говоря: всё, что вы видите в сцене (камеры, 3D-объекты, UI-элементы) — это GameObject'ы!
📦 GameObject = Контейнер для компонентов
Сам по себе GameObject — просто "пустая коробка". Его функциональность определяют компоненты, которые к нему прикреплены:
• Transform — позиция/размер/поворот
• MeshRenderer — отображение 3D-модели
• Collider — обработка столкновений
• И любые ваши скрипты!
🔧 Ключевые особенности
1. Наследование
• Происходит от класса UnityEngine.Object (не путать с System.Object!).
• Даёт доступ к методам вроде Destroy(), Find(), Instantiate().
2. Основные свойства
• name — Имя объекта (можно менять в runtime).
• tag — Метка для быстрого поиска/фильтрации.
• activeSelf — Локальная активность (SetActive(true/false)).
• activeInHierarchy — Учитывает активность родителей.
• transform — Ссылка на компонент Transform (есть у всех GameObject'ов).
3. Оптимизация
• isStatic — для "запечённого" освещения и других оптимизаций.
• layer — управление рендерингом и физикой.
🚀 Что разберём в следующих постах?
• Методы создания и удаления объектов
• Управление компонентами объектов.
• Поиск объектов на сцене.
GameObject — это фундаментальный строительный блок любой сцены в Unity.
📌 Проще говоря: всё, что вы видите в сцене (камеры, 3D-объекты, UI-элементы) — это GameObject'ы!
📦 GameObject = Контейнер для компонентов
Сам по себе GameObject — просто "пустая коробка". Его функциональность определяют компоненты, которые к нему прикреплены:
• Transform — позиция/размер/поворот
• MeshRenderer — отображение 3D-модели
• Collider — обработка столкновений
• И любые ваши скрипты!
🔧 Ключевые особенности
1. Наследование
• Происходит от класса UnityEngine.Object (не путать с System.Object!).
• Даёт доступ к методам вроде Destroy(), Find(), Instantiate().
2. Основные свойства
• name — Имя объекта (можно менять в runtime).
• tag — Метка для быстрого поиска/фильтрации.
• activeSelf — Локальная активность (SetActive(true/false)).
• activeInHierarchy — Учитывает активность родителей.
• transform — Ссылка на компонент Transform (есть у всех GameObject'ов).
3. Оптимизация
• isStatic — для "запечённого" освещения и других оптимизаций.
• layer — управление рендерингом и физикой.
🚀 Что разберём в следующих постах?
• Методы создания и удаления объектов
• Управление компонентами объектов.
• Поиск объектов на сцене.
🔧 Создание и удаление GameObject в Unity | Часть 2
GameObject — как Lego-деталь: можно собрать новую, скопировать существующую или даже разобрать на части. Сегодня разберём все способы работы с объектами!
🛠 3 способа создания объектов
1. Через конструкторы
2. Клонирование (Instantiate)
Основной метод для работы с префабами:
3. Примитивы (кубы, сферы)
Доступные примитивы:
▫️ Cube ▫️ Sphere ▫️ Cylinder
▫️ Capsule ▫️ Plane ▫️ Quad
💥 Уничтожение объектов
⚠️ Важно:
DestroyImmediate может нарушить порядок выполнения кода. Используйте только в особых случаях!
📌 Итог
new GameObject() — Для пустых "контейнеров"
Instantiate() — Для префабов и копий
CreatePrimitive() — Для быстрого прототипирования
Destroy() — Для безопасного удаления
💡 Пример из практики:
🔜 В следующей части:
Разберём методы работы с компонентами!
GameObject — как Lego-деталь: можно собрать новую, скопировать существующую или даже разобрать на части. Сегодня разберём все способы работы с объектами!
🛠 3 способа создания объектов
1. Через конструкторы
// 1. Просто пустой объект
GameObject emptyGO = new GameObject();
// 2. С именем (удобно для поиска!)
GameObject namedGO = new GameObject("МойОбъект");
// 3. С готовыми компонентами
GameObject audioGO = new GameObject("Аудио", typeof(AudioSource));
2. Клонирование (Instantiate)
Основной метод для работы с префабами:
public GameObject prefab; // Ссылка на префаб
void Start() {
// Клонируем с позицией и поворотом
GameObject clone = Instantiate(prefab, new Vector3(0, 0, 0), Quaternion.identity);
}
3. Примитивы (кубы, сферы)
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
Доступные примитивы:
▫️ Cube ▫️ Sphere ▫️ Cylinder
▫️ Capsule ▫️ Plane ▫️ Quad
💥 Уничтожение объектов
// 1. Обычное удаление (в конце кадра)
Destroy(gameObject);
// 2. С задержкой (например, для эффектов)
Destroy(gameObject, 3f); // Через 3 секунды
// 3. Мгновенное удаление (осторожно!)
DestroyImmediate(gameObject);
⚠️ Важно:
DestroyImmediate может нарушить порядок выполнения кода. Используйте только в особых случаях!
📌 Итог
new GameObject() — Для пустых "контейнеров"
Instantiate() — Для префабов и копий
CreatePrimitive() — Для быстрого прототипирования
Destroy() — Для безопасного удаления
💡 Пример из практики:
// Создаём временный эффект
GameObject effect = Instantiate(explosionPrefab);
Destroy(effect, 2f); // Автоудаление через 2 секунды
🔜 В следующей части:
Разберём методы работы с компонентами!
🛠 Работа с компонентами GameObject | Часть 3
Компоненты — как детали конструктора: собирайте нужные комбинации, чтобы задать поведение объекта. Сегодня разберём все способы управления компонентами!
🔧 Добавление компонентов
Два идентичных способа (выберите удобный):
➡️ Оба возвращают ссылку на новый компонент.
🔎 Получение компонентов
Основные методы (от простого к сложному):
1. Базовые методы
2. Поиск в иерархии
3. Безопасная проверка (рекомендуется!)
✅ Почему лучше? Не вызывает исключений если компонента нет.
🗑 Удаление компонентов
Передаём не GameObject, а сам компонент:
⚠️ Объект останется, но потеряет физику!
📚 Полный список методов
GetComponent — Основной метод поиска
GetComponents — Все компоненты типа
GetComponentInChildren — Поиск вниз по иерархии
GetComponentInParent — Поиск вверх по иерархии
TryGetComponent — Безопасная проверка
💡 Когда что использовать?
GetComponent — если компонент точно есть
TryGetComponent — для безопасной проверки
GetComponentInChildren — для сложных префабов
GetComponents — когда нужно несколько однотипных компонентов
🔜 В следующей части:
Разберём поиск объектов из кода!
Компоненты — как детали конструктора: собирайте нужные комбинации, чтобы задать поведение объекта. Сегодня разберём все способы управления компонентами!
🔧 Добавление компонентов
Два идентичных способа (выберите удобный):
// Способ 1 (дженерик)
Rigidbody rb = gameObject.AddComponent<Rigidbody>();
// Способ 2 (через typeof)
Rigidbody rb = gameObject.AddComponent(typeof(Rigidbody)) as Rigidbody;
➡️ Оба возвращают ссылку на новый компонент.
🔎 Получение компонентов
Основные методы (от простого к сложному):
1. Базовые методы
// Получение одного компонента (если нет — вернёт null)
MeshRenderer renderer = gameObject.GetComponent<MeshRenderer>();
// Получение ВСЕХ компонентов типа
Rigidbody[] allRigidbodies = gameObject.GetComponents<Rigidbody>();
2. Поиск в иерархии
// Поиск в дочерних объектах (включая текущий)
Collider collider = gameObject.GetComponentInChildren<Collider>();
// Поиск в родительских объектах
Light parentLight = gameObject.GetComponentInParent<Light>();
3. Безопасная проверка (рекомендуется!)
if (gameObject.TryGetComponent(out Rigidbody rb)) {
rb.AddForce(Vector3.up * 10f); // Работаем с rb
}✅ Почему лучше? Не вызывает исключений если компонента нет.
🗑 Удаление компонентов
Передаём не GameObject, а сам компонент:
Destroy(gameObject.GetComponent<Rigidbody>());
⚠️ Объект останется, но потеряет физику!
📚 Полный список методов
GetComponent — Основной метод поиска
GetComponents — Все компоненты типа
GetComponentInChildren — Поиск вниз по иерархии
GetComponentInParent — Поиск вверх по иерархии
TryGetComponent — Безопасная проверка
💡 Когда что использовать?
GetComponent — если компонент точно есть
TryGetComponent — для безопасной проверки
GetComponentInChildren — для сложных префабов
GetComponents — когда нужно несколько однотипных компонентов
🔜 В следующей части:
Разберём поиск объектов из кода!
This media is not supported in your browser
VIEW IN TELEGRAM
🚀 ProBuilder в Unity: 3D-моделинг прямо в редакторе!
Хотите быстро создавать прототипы уровней без Blender? ProBuilder — ваш лучший инструмент!
🔧 Что такое ProBuilder?
Это встроенный пакет Unity для:
✔️ Быстрого моделирования простых 3D-объектов
✔️ Прототипирования уровней "на лету"
✔️ Редактирования мешей без сторонних программ
📥 Установка
- Window → Package Manager
- В поиске введите "ProBuilder"
- Нажмите Install
🎮 Попробуйте прямо сейчас!
Хотите быстро создавать прототипы уровней без Blender? ProBuilder — ваш лучший инструмент!
🔧 Что такое ProBuilder?
Это встроенный пакет Unity для:
✔️ Быстрого моделирования простых 3D-объектов
✔️ Прототипирования уровней "на лету"
✔️ Редактирования мешей без сторонних программ
📥 Установка
- Window → Package Manager
- В поиске введите "ProBuilder"
- Нажмите Install
🎮 Попробуйте прямо сейчас!
Недавно занимался поиском игр на itch с целью найти что нибудь, что можно потенциально украсть скопировать и нашёл вот этот алмаз:
https://minigoliath.itch.io/dropship
Игра интересная, но к сожалению идёт только под Windows.
https://minigoliath.itch.io/dropship
Игра интересная, но к сожалению идёт только под Windows.
🔍 Поиск объектов в Unity: полный гайд | Часть 4
GameObject — это как игровой мир, полный спрятанных сокровищ. Давайте научимся быстро находить нужные объекты! Вот все рабочие методы:
📌 3 основных способа поиска
1. По имени (медленно!)
⚠️ Минусы:
- Работает только с активными объектами
- Медленный (перебирает всю сцену)
- Чувствителен к регистру
2. По тегу (оптимально)
✅ Плюсы:
- Быстрее поиска по имени
- Можно группировать объекты (например: "Enemy", "Item")
3. По типу компонента
🌟 Совет: Новые методы 2022.3:
- FindAnyObjectByType — случайный объект
- FindFirstObjectByType — первый найденный
⚡️ Сравнение производительности
Find — 🐢 — Только при старте
FindWithTag — 🐇 — Для групповых объектов
FindObjectOfType — 🐆 — Для уникальных компонентов
💡 Практические примеры
❌ Чего НЕ СТОИТ делать:
🚀 Оптимальная стратегия
- Кешируйте ссылки в Start()/Awake()
- Используйте теги для групп объектов
- Для динамичных объектов — публичные ссылки в инспекторе
🔜 В следующей части:
Разберём отправку сообщений между объектами
GameObject — это как игровой мир, полный спрятанных сокровищ. Давайте научимся быстро находить нужные объекты! Вот все рабочие методы:
📌 3 основных способа поиска
1. По имени (медленно!)
GameObject player = GameObject.Find("Player");⚠️ Минусы:
- Работает только с активными объектами
- Медленный (перебирает всю сцену)
- Чувствителен к регистру
2. По тегу (оптимально)
// Найти первый объект с тегом
GameObject enemy = GameObject.FindWithTag("Enemy");
// Найти ВСЕ объекты с тегом
GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy");
✅ Плюсы:
- Быстрее поиска по имени
- Можно группировать объекты (например: "Enemy", "Item")
3. По типу компонента
// Найти первый объект с компонентом
Light mainLight = FindFirstObjectByType<Light>();
// Найти ВСЕ объекты с компонентом
Enemy[] allEnemies = FindObjectsOfType<Enemy>();
🌟 Совет: Новые методы 2022.3:
- FindAnyObjectByType — случайный объект
- FindFirstObjectByType — первый найденный
⚡️ Сравнение производительности
Find — 🐢 — Только при старте
FindWithTag — 🐇 — Для групповых объектов
FindObjectOfType — 🐆 — Для уникальных компонентов
💡 Практические примеры
// 1. Поиск игрока при старте
void Start() {
_player = GameObject.FindWithTag("Player");
}
// 2. Поиск всех монеток
Coin[] coins = FindObjectsByType<Coin>(FindObjectsSortMode.None);
// 3. Экстренный поиск (если потеряли ссылку)
Door door = FindAnyObjectByType<Door>();
❌ Чего НЕ СТОИТ делать:
// Плохо: поиск каждый кадр
void Update() {
var obj = Find("DynamicObject");
}
🚀 Оптимальная стратегия
- Кешируйте ссылки в Start()/Awake()
- Используйте теги для групп объектов
- Для динамичных объектов — публичные ссылки в инспекторе
🔜 В следующей части:
Разберём отправку сообщений между объектами
🔔 Отправка сообщений между объектами в Unity | Часть 5
Сообщения — это как почтовая система вашей игры: они позволяют объектам общаться, даже не зная друг о друге. Разберём три мощных метода!
📩 3 способа отправки сообщений
1. SendMessage (Почта для себя)
🔹 Особенности:
- Работает только с текущим GameObject
- Если метод не найден — ошибка (если не указано иное)
2. BroadcastMessage (Массовая рассылка)
🌐 Где ищет:
Текущий объект → Все дочерние объекты (рекурсивно)
3. SendMessageUpwards (Письмо родителям)
🔼 Где ищет:
Текущий объект → Родитель → Дедушка → ...
⚙️ Параметры отправки
Все методы поддерживают опцию:
Пример:
🚫 Опасные моменты
📊 Сравнение методов
- SendMessage — Только себе
- BroadcastMessage — Вниз по иерархии
- SendMessageUpwards — Вверх по иерархии
Сообщения — это как почтовая система вашей игры: они позволяют объектам общаться, даже не зная друг о друге. Разберём три мощных метода!
📩 3 способа отправки сообщений
1. SendMessage (Почта для себя)
// Вызывает метод только у самого объекта
gameObject.SendMessage("TakeDamage", 10.0f);
🔹 Особенности:
- Работает только с текущим GameObject
- Если метод не найден — ошибка (если не указано иное)
2. BroadcastMessage (Массовая рассылка)
// Вызывает метод у объекта и ВСЕХ его детей
gameObject.BroadcastMessage("Heal", 25.0f);
🌐 Где ищет:
Текущий объект → Все дочерние объекты (рекурсивно)
3. SendMessageUpwards (Письмо родителям)
// Вызывает метод у объекта и ВСЕХ его родителей
gameObject.SendMessageUpwards("AddScore", 100);
🔼 Где ищет:
Текущий объект → Родитель → Дедушка → ...
⚙️ Параметры отправки
Все методы поддерживают опцию:
SendMessageOptions.DontRequireReceiver // Не ругаться, если метод не найден
Пример:
// Безопасный вызов (не будет ошибки)
enemy.SendMessage("PlaySound", options: SendMessageOptions.DontRequireReceiver);
🚫 Опасные моменты
// Плохо: хрупкая связь (метод может переименоваться)
enemy.SendMessage("TakeDmg"); // Опечатка = ошибка!
// Лучше: использовать события (C# events) или ScriptableObject
📊 Сравнение методов
- SendMessage — Только себе
- BroadcastMessage — Вниз по иерархии
- SendMessageUpwards — Вверх по иерархии
