Инкапсуляция — это не скучная теория, а твой главный инструмент для чистого и защищённого кода. Суть: прячем данные, открываем только нужные методы.
🎯 Зачем в играх?
• Предотвращаем случайные баги (другой скрипт не сломает твои переменные)
• Делаем код понятнее — чёткие границы ответственности
• Упрощаем изменения — меняем внутреннюю логику без поломки других систем
🛡 Практика в Unity:
1️⃣ private + [SerializeField]
private int _health = 100;
Доступ только внутри этого класса. Для настройки в инспекторе используем:
[SerializeField] private int _health = 100;
2️⃣ public свойства с контролем
public int Health { get; private set; }Читать можно откуда угодно, менять — только внутри класса.
3️⃣ protected — для семейного доступа
protected int _mana;
Доступ в этом классе И во всех наследниках. Идеально для базовых классов!
💥 Живой пример с protected:
public class Character : MonoBehaviour
{
[SerializeField] protected int maxHealth = 100;
public int Health { get; protected set; }
protected virtual void Start() => Health = maxHealth;
public virtual void TakeDamage(int damage)
{
Health = Mathf.Max(0, Health - damage);
}
}
public class Player : Character
{
protected override void Start()
{
base.Start();
// Можем использовать Health и maxHealth - они protected
Health += 50; // Бонус здоровья для игрока
}
}
✅ Вывод:
• private — только для своего класса
• protected — для семьи (родитель + наследники)
• public — для всех
💬 Как ты организуешь доступ к данным в своих скриптах?
🔔 Подпишись — впереди ещё больше про архитектуру игр без факапов
👉Akrus Games | Unity