Компоненты — как детали конструктора: собирайте нужные комбинации, чтобы задать поведение объекта. Сегодня разберём все способы управления компонентами!
🔧 Добавление компонентов
Два идентичных способа (выберите удобный):
// Способ 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 — когда нужно несколько однотипных компонентов
🔜 В следующей части:
Разберём поиск объектов из кода!