2016-06-06 2 views
0

Итак, у меня есть некоторые скриптовые объекты, которые в настоящее время хранят немного информации и меняют bool во время выполнения.Что происходит с сохраненными объектами сценариев при загрузке обновления?

Я хочу, чтобы этот bool продолжался между сессиями. без обновления, конечно, это прекрасно.

Однако, скажем, я запускаю эту текущую версию, и пользователи используют игру и устанавливают некоторые из bools от false до true. Если я выпущу обновление, это обновление будет иметь все значения bools по умолчанию false, когда они будут применять обновление, они потеряют значение true, которое они установили на любом из своих скриптовых объектов?

Если нет, не могли бы вы объяснить, почему это не так, поскольку я не понимаю, как это могло быть?

Если да, то я полагаю, что лучшим решением было бы сохранить список объектов, доступных для скрипта, которые были установлены в их наборе bool, и после того, как они будут сброшены по мере необходимости? Есть ли что-нибудь более элегантное?

ответ

0

Хранить bools с PlayerPrefs. Когда следующий сеанс запущен, сначала нужно проверить, существует ли на диске bool. Если это произойдет, загрузите его и переопределите значение по умолчанию bool с загруженным bool.

Если bool не существует, сохраните текущий по умолчанию bool в следующий раз. В игре есть (OnDisable) или другие подобные функции обратного вызова, сохраните bool. Это все, что вам нужно. Он всегда будет там до тех пор, пока не будет вызвано PlayerPrefs.DeleteAll или PlayerPrefs.DeleteKey.

Ниже приведен полный пример. Он проверяет, если звук включен, и это хорошо прокомментирован:

bool soundOn = false; 

//Check if soundOn key Exist (return -1 if it doesn't exist) 
if (PlayerPrefs.GetInt("soundOn", -1) == -1) 
{ 
    //It doesn't exist. Now save the current value 
    if (soundOn) 
    { 
     PlayerPrefs.SetInt("soundOn", 1); 
    } 
    else 
    { 
     PlayerPrefs.SetInt("soundOn", 0); 
    } 
    PlayerPrefs.Save(); 
} 
//soundOn key Exist. Now Load it and override soundOn bool 
else 
{ 
    int tempBool = PlayerPrefs.GetInt("soundOn"); 
    if (tempBool == 0) 
    { 
     soundOn = false; 

    } 
    else if (tempBool == 1) 
    { 
     soundOn = true; 
    } 
} 

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

+0

Я могу сохранить bool, но мне было интересно, будет ли он определенно перезаписан в ScriptableObject, когда пользователь будет обновлен или будет сохраняться? – pingu2k4

+0

@MatthewParker Я знаю, что вы можете сохранить bool, и я ответил на эту часть вопроса. ** Он всегда будет там до вызова PlayerPrefs.DeleteAll или PlayerPrefs.DeleteKey, чтобы очистить его. ** Поэтому он не будет перезаписан. Он будет там и до тех пор, пока вы его не перезапишете. – Programmer

+0

К сожалению, я имел в виду объект, доступный для сценариев. Если объект scriptable имеет свой bool, установленный в true, будет ли он перенаправлен при обновлении или он останется в качестве основной версии? – pingu2k4

Смежные вопросы