Skip to content

Latest commit

 

History

History
92 lines (64 loc) · 5.17 KB

File metadata and controls

92 lines (64 loc) · 5.17 KB

🧩 GameObject и Component: Контейнер vs Поведение

В Unity всё, что существует в сцене — это GameObject. Но сам по себе GameObject — пустая коробка. Всю функциональность ему дают Component (компоненты). Понимание этой разницы — ключ к гибкой архитектуре без путаницы.


📦 Что такое GameObject?

GameObject (игровой объект) — это контейнер. У него нет свойств типа «скорость», «здоровье» или «модель». У него есть только:

  • Имя (name)
  • Активность (activeSelf / SetActive())
  • Позиция, вращение, масштаб (через обязательный компонент Transform)
  • Список прикреплённых компонентов

🧠 Представьте GameObject как пустую пластиковую коробку с наклейкой-именем. Сама коробка ничего не делает.

Примеры GameObject:

  • Пустой объект (Create Empty)
  • Куб, сфера, капсула (на самом деле это GameObject + компонент MeshFilter + MeshRenderer)
  • Персонаж, стена, источник света, камера

⚙️ Что такое Component?

Component (компонент) — это поведение, данные или возможность, которые вы добавляете в GameObject. Компонент:

  • Не существует сам по себе (всегда прикреплён к GameObject)
  • Даёт объекту конкретные свойства: физику, визуал, звук, логику
  • Можно удалить, добавить, временно отключить

🧠 Представьте компоненты как инструменты, которые вы кладёте в коробку: мотор (Rigidbody), краска (MeshRenderer), микрофон (AudioSource), мозг (ваш скрипт).

Примеры компонентов:

  • Transform (есть у каждого GameObject, его нельзя удалить)
  • MeshRenderer — чтобы объект был видим
  • Rigidbody — чтобы на него действовала гравитация и физика
  • AudioSource — чтобы проигрывать звук
  • Ваш собственный скрипт PlayerHealth.cs — чтобы хранить здоровье и реагировать на урон

🔄 Главная разница (коротко)

Характеристика GameObject Component
Суть Контейнер Поведение / данные
Может существовать один? ✅ Да ❌ Нет (только внутри GameObject)
Добавляется / удаляется Создание/уничтожение объекта ✅ Можно добавлять и удалять
Пример "Персонаж", "Дверь" "Скрипт движения", "Коллайдер"

🛠️ Как использовать на практике

1️⃣ Создайте пустой GameObject

Иерархия → ПКМ → Create Empty → назовите Enemy

2️⃣ Добавьте компоненты через Inspector

Выделите Enemy → кнопка Add Component:

  • Mesh Filter → выберите модель (например, сфера)
  • Mesh Renderer → назначьте материал (цвет)
  • Capsule Collider → чтобы на него можно было столкнуться
  • Rigidbody → чтобы он падал под гравитацией
  • Ваш скрипт EnemyAI (напишите его) → чтобы враг двигался к игроку

3️⃣ Отключайте компоненты во время игры

Снимите галоку с Rigidbody в Inspector → гравитация пропадёт.
Снимите с Mesh Renderer → враг станет невидимым (но продолжит работать по логике).


🧪 Типичная ошибка новичка

❌ «Мой скрипт не видит переменную Speed другого объекта»
✅ Надо понять: переменная лежит не в GameObject, а в конкретном компоненте (например, PlayerMovement). Получать её нужно так:

GameObject player = GameObject.Find("Player");
PlayerMovement movement = player.GetComponent<PlayerMovement>();
float speed = movement.speed;

🧠 Золотое правило Unity

GameObject определяет ЧТО существует. Component определяет ЧТО ОНО ДЕЛАЕТ и КАК ВЫГЛЯДИТ.


⭐ Если этот проект был полезен, поставьте звезду на GitHub!