Сохрани — эти два подхода разложат архитектуру твоей игры по полочкам. Понял их — избежишь спагетти-кода, когда игра растёт.
🧱 Классы в Unity — это чертежи твоих объектов
Они описывают, что объект может делать и какие данные хранить. Всё в C# построено на классах. В Unity каждый твой скрипт — по умолчанию класс.
public class Enemy
{
public int health = 100;
public void Attack() { /* Логика атаки */ }
}
🔄 Наследование — Когда «Враг» и «Босс» имеют общее
Зачем копировать один и тот же код? Создай базовый класс и унаследуй от него.
🎯 Вариант 1: Классическое наследование (Иерархия «is-a»)
Идеально, когда у объектов общая логика, но есть специфика.
// Базовый класс для ВСЕХ врагов
public class Enemy : MonoBehaviour
{
[SerializeField] protected int health; // protected — видно в наследниках
public virtual void TakeDamage(int damage)
{
health -= damage;
Debug.Log($"Enemy health: {health}");
}
}
// Конкретный тип врага
public class FlyingEnemy : Enemy
{
public override void TakeDamage(int damage)
{
base.TakeDamage(damage); // Вызов метода из родителя
// Уникальное поведение для летающего врага
if (health < 30) FlyAway();
}
}
➡️ Когда использовать: Чёткая иерархия (например,
Enemy → MeleeEnemy / RangedEnemy). Логика общая, но дополняется.🎯 Вариант 2: Композиция + ScriptableObject (Гибкость «has-a»)
Чаще используется в современных подходах. Разделяй данные и поведение.
// Данные врага вынесены в отдельный объект
[CreateAssetMenu]
public class EnemyData : ScriptableObject
{
public int health;
public int damage;
public GameObject prefab;
}
// Основной класс врага использует данные
public class Enemy : MonoBehaviour
{
public EnemyData data;
private int currentHealth;
void Start()
{
currentHealth = data.health; // Берём данные из ScriptableObject
}
}
➡️ Когда использовать: Нужна быстрая настройка и вариативность (10 типов врагов с разными HP/уроном). Легко балансить игру без изменения кода.
💎 Итог:
• Наследование — строй иерархию «от общего к частному».
• Композиция (использование отдельных классов/данных) — чаще практичнее в геймдеве.
• В Unity MonoBehaviour — уже базовый класс. Твои скрипты наследуются от него.
📌 Правило для инди: Начинай с простого наследования для 2-3 типов врагов. Когда появится 10+ типов с кучей параметров — выноси данные в ScriptableObject.
💬 Твой код больше похож на первый или второй вариант? Делись в комментах!
🔔 Подпишись — дальше разберём интерфейсы и абстрактные классы на реальных примерах из игр.
👉Akrus Games | Unity