public void saveData()
{
Reference.Child("users").Child(userId).Child("level").SetValueAsync(levelText.text.ToString());
}
public void loadData()
{
FirebaseDatabase.DefaultInstance.GetReference("").ValueChanged += Script_ValueChanged;
}
private void Script_ValueChanged(object sender, ValueChangedEventArgs e)
{
levelText.text = e.Snapshot.Child("users").Child(userId).Child("level").GetValue(true).ToString();
}
В этом примере я могу загрузить свой уровень из базы данных и сохранить его. Моя проблема сейчас в том, что я хочу загрузить уровень из базы данных и сохранить его в переменной уровня Int, чтобы я мог сделать функцию повышения уровня и обновить уровень в базе данных. Кто-нибудь знает, как это сделать?
private void Script_ValueChanged(object sender, ValueChangedEventArgs e)
{
level = (int)e.Snapshot.Child("users").Child(userId).Child("level").GetValue(true);
levelText.text = level.ToString();
}
моя идея, возможно, заключалась в том, чтобы сделать это таким образом, но внутри единства это дает мне сообщение об ошибке в этой строке: «System.InvalidCastException: указанное приведение недействительно».





Вам нужно разобрать int из string, потому что string нельзя преобразовать в int. Вы можете использовать int.Parse() для этого, если знаете, что оно содержит допустимое целое число:
private void Script_ValueChanged(object sender, ValueChangedEventArgs e)
{
level = int.Parse(e.Snapshot.Child("users").Child(userId).Child("level").GetValue(true));
levelText.text = level.ToString();
}
Документация для int.Parse(): https://learn.microsoft.com/en-us/dotnet/api/system.int32.parse?view=net-7.0
Кроме того, вы также можете использовать int.TryParse(), если вы не уверены на 100%, что строка содержит допустимое целое число:
private void Script_ValueChanged(object sender, ValueChangedEventArgs e)
{
if (int.TryParse(e.Snapshot.Child("users").Child(userId).Child("level").GetValue(true), out int parsedInt))
{
level = parsedInt;
}
levelText.text = level.ToString();
}
Документация для int.TryParse():
https://learn.microsoft.com/en-us/dotnet/api/system.int32.tryparse?view=net-7.0
Другим решением было бы использовать Convert.ToInt32() вместо int.Parse(), но это будет делать то же самое:
https://learn.microsoft.com/en-us/dotnet/api/system.convert.toint32?view=net-7.0
Я получил ошибку с int.Tryparse, потому что я думаю, что данные из базы данных - это просто объект, который нельзя преобразовать с помощью int.TryParse, поэтому я просто попробовал Convert.ToInt32, и это было нормально :) Спасибо. Редактировать: я хотел вставить новый код, но здесь он выглядел очень уродливо, я просто изменил int.TryParse на Convert.ToInt32
Вы всегда можете привести object к string, если базовым типом является string. Вы также можете сделать это с проверкой типов, например: if (someObject is string myString) {...}. Convert.ToInt32() тоже допустимый вариант, я добавлю это к ответу.
Вы не можете привести строку к типу int. Вы можете использовать
Int32.TryParse()илиInt32.Parse()для этого: learn.microsoft.com/en-us/dotnet/api/… Это не имеет ничего общего с Firebase или Unity, это просто C#.