Scriptableobject unity что это?
Пробовал хранить параметры оружия в MonoBehaviour, копировал значения в префабы, смотрел ScriptableObject. Нужно понять, чем такой ассет отличается от компонента и куда положить общие настройки
Компьютеры и связь
Юридическая консультация
Семья и дом
Еда и кулинария
Города и страны, туризм
Пробовал хранить параметры оружия в MonoBehaviour, копировал значения в префабы, смотрел ScriptableObject. Нужно понять, чем такой ассет отличается от компонента и куда положить общие настройки
ScriptableObject подходит для хранения общих данных проекта в отдельном ассете. Например, базовый урон, название и значок типа оружия можно вынести в WeaponData, а разные экземпляры оружия будут ссылаться на один ресурс. В отличие от MonoBehaviour такой объект не требуется прикреплять к GameObject как компонент. Создайте собственный класс, наследующий ScriptableObject, объявите сериализуемые поля и добавьте CreateAssetMenu, если хотите создавать экземпляры через меню Assets → Create. После компиляции создайте ассет, заполните его значения в Inspector и назначьте ссылку на него компоненту оружия. Один файл C# описывает тип данных, а созданный ассет хранит конкретный набор, например параметры лёгкого меча. Для тяжёлого меча можно создать второй ассет того же типа с другими значениями. Общая ссылка означает, что это не независимая копия для каждого предмета. Если несколько экземпляров используют один WeaponData, изменение его данных в памяти будет видно всем, кто читает тот же объект. Поэтому индивидуальное состояние, например оставшуюся прочность конкретного меча, обычно держат отдельно от общих настроек типа. ScriptableObject не является автоматической системой сохранения прогресса игрока между запусками готовой игры. Подготовленные в Editor данные могут входить в сборку, но изменение их во время игры само по себе не записывает постоянное пользовательское сохранение. Сначала разделите настройки и состояние: общие неизменяемые параметры удобно читать из ассета, а изменяемые значения экземпляра хранить в соответствующем игровом объекте. Это уменьшает ручное копирование настроек и делает их связь между префабами понятной.
ScriptableObject — отдельный объект данных Unity, который удобно сохранять как ассет и передавать по ссылке нескольким компонентам. Для вашего оружия это может быть WeaponData с базовым уроном, названием и значком.
Создайте класс от ScriptableObject, добавьте нужные сериализуемые поля и CreateAssetMenu. Затем создайте экземпляр через Assets → Create, заполните его в Inspector и назначьте компонентам оружия. Сам ScriptableObject не нужно добавлять на GameObject.
Разделяйте общий тип и отдельный предмет. Базовый урон меча может быть общим, а текущая прочность конкретного экземпляра — личным состоянием. Изменение общего ассета в памяти затронет всех пользователей этой ссылки. Сохранение прогресса между запусками сборки требует отдельного механизма.
Пока нет премиум-вопросов в подборке
Не нашли то, что искали?
Задайте свой вопрос
Ответить на вопрос