Только сейчас заметил, что C# не обновляет свойства классов, в реальном времени.
Есть свойство в классе Str:
private static readonly string str= !"".Equals(PlayerPrefs.GetString("str")) ? PlayerPrefs.GetString("str") : "str";
Когда я изменяю, где-то в другом месте:
PlayerPrefs.SetString("str", "str2");
И вызываю:
print(Str.str);
У меня выводит str, за место заявленного str2.
Срабатывает, только после перезапуска...
Что делать и как быть?
О том, чтобы выяснять это где-то в методе, я не считаю правильным.
Почему вообще так происходит и с чем связано, сие чудо?
В других языках, не наблюдал такого, например в Java все работает должным образом.
А с чего str должна стать "str2"? Ты определил его до того, как записать новое значение в PlayerPrefs. Всё равно что удивиться следующему:
void Start () {
int a = 1;
aChange(a);
Debug.Log(a); // Почему в логе 1, а не 2
}
void aChange (int a) {
a = 2;
}
Это же не ссылка на объект, а значение. Либо ты ошибся с static. Конструктор для static вызывается всего 1 раз (первый) сколько бы экземпляров классов ты не создал. И в других языках это так-же... и в Java тоже... иначе как-бы у вас Singleton работал.
public static void LogTest () {
Debug.Log("Result 1: "+ValueStr);
ValueStr = "str2";
Debug.Log("Result 2: "+ValueStr);
}
static string SaveValueStr;
public static string ValueStr {
get {
if (SaveValueStr == "") {
SaveValueStr = PlayerPrefs.GetString("str");
if (SaveValueStr == "") { SaveValueStr = "str"; }
}
return SaveValueStr;
}
set {
SaveValueStr = value;
PlayerPrefs.SetString("str", SaveValueStr);
}
}
Используй модификаторы доступа get/set.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости