Вступить в клуб →
средняявопросАрхитектура игрового кода

Золото в ScriptableObject: в редакторе сохраняется, в билде сбрасывается

Состояние игрока держат в ассете-конфиге:

[CreateAssetMenu]
public class PlayerState : ScriptableObject
{
    public int Gold;
}

Поле Gold меняется прямо во время игры. Тестировщик в редакторе видит: заработанное золото остаётся после выхода из режима игры и переносится в следующий запуск. На собранном билде золото сбрасывается к исходному значению при каждом перезапуске приложения. Почему поведение разное?

  • Наоборот: значения сохраняются именно в билде, потому что ассет лежит в файлах приложения, а редактор перезагружает его с диска при каждом входе в режим игры
  • Разница из-за модификатора public: с приватным полем и атрибутом сериализации поведение в редакторе и в собранной игре станет одинаковым
  • В редакторе меняется сам файл ассета в проекте, а в билде ассет распакован из пакета и при каждом запуске возвращается к исходному значению
  • Значение сбрасывается, потому что ассет не помечен как переживающий загрузку сцены: без этой метки движок пересоздаёт его при каждой смене сцены

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела