ScriptableObject
Класс Unity для данных, которые живут отдельным файлом в проекте, а не компонентом на игровом объекте.
Обычный компонент Unity должен висеть на GameObject в сцене. ScriptableObject — самостоятельный ассет: вы наследуете класс, помечаете его [CreateAssetMenu] и создаёте экземпляры как файлы .asset в редакторе. Характеристики оружия, типы врагов и деревья диалогов становятся данными, которые дизайнеры правят, не открывая сцену, и на которые тысяча объектов может ссылаться без копирования.
Доклад Райана Хиппла на Unite 2017 популяризировал подход и для каналов событий и общих переменных. Ловушка в том, что изменения, сделанные в режиме Play внутри редактора, сохраняются в файл ассета навсегда, — а в собранной игре тот же код ведёт себя иначе.