Pull to refresh

Comments 9

Удобство управления данными

Когда вам, чтобы поменять хп у сотни врагов в вашей игре, нужно выбрать каждого персонально и изменить поле в редакторе - это не удобная работа с данными. Достоинства ScriptableObject совершенно не в этом, а в том, что его полями могут быть не простые типы, а сущности движка: спрайты, префабы, прочие ассеты и другие SO.

Например, вам нужно создать описание персонажа, которое объединит его префаб, спрайт иконки и контроллер анимации. Вот тут без SO не обойтись. Можно, конечно, хранить эти ассеты в Resources с определёнными именами, но такой способ имеет много минусов и разработчиками движка не рекоментдуется.

Данные из простых типов (например, характеристики персонажа) гораздо удобнее хранить в обычной экселевской таблице (или в каком-то удобном вам текстовом формате) и уже оттуда генерить в движок. Тогда эти данные легко массово редактировать и их можно мержить.

Спасибо за отзыв)

В общем то вы правы, но сотни врагов будут не в каждой игре, следовательно нет надобности всегда работать с таблицами. А вот в мое случае у персонажа есть еще и набор скилов, которые вы не сможете таким образом настраивать.

Нестандартные типы данных я как раз таки показал в статье.

Данные из простых типов (например, характеристики персонажа) гораздо
удобнее хранить в обычной экселевской таблице (или в каком-то удобном
вам текстовом формате) и уже оттуда генерить в движок.

Или в специализированном инструменте для этого - статичной БД. https://assetstore.unity.com/packages/tools/visual-scripting/charon-game-data-editor-95117

Неудобно это смотря с чем сравнивать. SO в любом случае гораздо удобнее, чем хранить данные в монобехах и каждый раз залезать в префаб, чтобы найти нужные данные.

Тут тоже есть проблемы с ассетами - достаточно добавить все эти so в сцену и получим загрузку всех связанных ассетов при открытии сцены. Тут либо в ресурсы пихать и загружать нужные so (вместе со связанными в них ассетами) либо в бандлы и грузить только нужные бандлы.

И в стриминг ассетс не засунуть so, потому что внутри должны быть сериализованные данные из билда, поэтому в прямом виде только в ресурсах хранить, а в запакованном получатся бандлы в стриминге. Значит надо либо в каждой сцене хранить только используемый набор so и делать кучу сцен, либо выделять бандлами наборы из so+assets

Не совсем понял, почему лучше\удобнее использовать именно ScriptableObject, а не просто шарповский класс. В примере вроде самые обычные поля и свойства.

Ты можешь хранить экземпляры SO прямо в файлах игры, а не на сцене. Таким образом очень удобно хранить настройки для чего либо. Или разный набор характеристик.

Sign up to leave a comment.

Articles