База по ScriptableObject в Unity
Введение
ScriptableObject — это специальный тип объекта в Unity, предназначенный для хранения данных вне сцены и игровых объектов. В отличие от MonoBehaviour, он не требует размещения на GameObject и может быть сохранён в виде отдельного файла. Это делает его отличным инструментом для повторного использования и организации данных в проекте
Если говорить проще — то это контейнер для данных, который живёт сам по себе и не зависит от сцены или объекта.
Когда и зачем это использовать
ScriptableObject особенно полезен когда:
Нужно вынести параметры объектов (оружие, враги, умения)
Требуется централизованная база данных (предметы, диалоги)
Вы реализуете архитектуру событий (например, через Event Channel)
Вы хотите перейти на data-driven подход, где поведение задаётся через данные, а не жёсткий код
Пример:
В каком-то проекте параметры оружия хранились прямо в префабе. После перехода на ScriptableObject стало проще управлять балансом и переиспользовать эти данные в других системах.
Как создать ScriptableObj
Создайте C#-класс, унаследованный от ScriptableObject:
После этого создайте экземпляр в Unity: Assets → Create → Weapons → WeaponData
Архитектурный подход
ScriptableObject отлично сочетается с модульной и data-driven архитектурой. Он позволяет разделить данные и поведение, облегчая масштабирование и поддержку проекта.
Используется в:
Системах навыков (каждый навык — отдельный ScriptableObject)
Конфигурации уровней и параметров сцен
UI-элементах (например, карточках с параметрами)
Системах модификаторов (бафы, дебаффы, эффекты)
На что обращать внимание
Изменения, сделанные в ScriptableObject во время игры в редакторе, сохраняются — аккуратнее с этим
Не стоит использовать ScriptableObject для временных данных, например, текущего прогресса игрока
Unity не сериализует словари(Dictionary) и некоторые вложенные структуры — можно использовать SerializableDictionary из сторонних решений
Если нужен уникальный экземпляр во время игры, используйте Instantiate:
Полезные ссылки
- https://docs.unity3d.com/ScriptReference/ScriptableObject.html
- https://www.youtube.com/watch?v=raQ3iHhE_Kk
- https://www.youtube.com/watch?v=6vmRwLYWNRo
"Никогда не использую по несколько раз разные видосики для моих фанатов, я просто краду их"
Заключение
ScriptableObject — это один из мощных инструментов в Unity, который часто недооценивают. Он делает проект чище, гибче и легче в поддержке. Если вы уже используете сериализуемые классы и копируете данные в скрипты — попробуйте перенести их в ScriptableObject. Надеюсь, материал был полезен