Золото в ScriptableObject: в редакторе сохраняется, в билде сбрасывается
Состояние игрока держат в ассете-конфиге:
[CreateAssetMenu]
public class PlayerState : ScriptableObject
{
public int Gold;
}
Поле Gold меняется прямо во время игры. Тестировщик в редакторе видит: заработанное золото остаётся после выхода из режима игры и переносится в следующий запуск. На собранном билде золото сбрасывается к исходному значению при каждом перезапуске приложения. Почему поведение разное?
- Наоборот: значения сохраняются именно в билде, потому что ассет лежит в файлах приложения, а редактор перезагружает его с диска при каждом входе в режим игры
- Разница из-за модификатора public: с приватным полем и атрибутом сериализации поведение в редакторе и в собранной игре станет одинаковым
- В редакторе меняется сам файл ассета в проекте, а в билде ассет распакован из пакета и при каждом запуске возвращается к исходному значению
- Значение сбрасывается, потому что ассет не помечен как переживающий загрузку сцены: без этой метки движок пересоздаёт его при каждой смене сцены
