Я задал около 4 вопросов, связанных с этим, пытаясь спросить, как решить конкретную логику, но через 12 часов я все еще застрял.Я прилагаю свой код, и если бы кто-нибудь мог помочь мне разобраться, как решить эту проблему, я был бы чрезвычайно признателен.
Так что этот код читает data.json и присваивает его строковому dataAsJson, а затем использует Json для загрузкидочерний allRoundData (в базе данных / json) и присваивает его строковому массиву allRoundData.
Сейчас программа компилируется, но вместо этого я пытаюсь получить информацию из базы данных Firebase.В коде вы можете видеть, как моментальный снимок DataSnapshot извлекается из базы данных (изменен URL-адрес по соображениям конфиденциальности), но я не могу понять, как подключить его к allRoundData вместо локального файла.
У меня естьпробовал несколько методов, но независимо от того, я получаю ошибку, что "allRoundData =loadedData.allRoundData;"не указывает на экземпляр объекта.Опять же, эта программа компилируется как есть, но когда на нее указывает объект базы данных Firebase, код разваливается.Я импортировал data.json точно в том же виде, что и в базу данных Firebase, поэтому я не уверен, что проблема на стороне базы данных или с моей логикой, преобразовывающей данные Firebase в строковый массив allRoundData.
IЯ не знаю, как отлаживать программу, я пытаюсь научиться, но я так долго застрял в этой проблеме, что не могу сосредоточиться на чем-то еще.Пожалуйста, кто-нибудь скажите мне, как это сделать.Я просмотрел каждую документацию, связанную с Firebase, базами данных и т. Д., Но ничего не работает.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using System.IO;
using Firebase;
using Firebase.Unity.Editor;
using Firebase.Database;
public class FirebaseStart : MonoBehaviour
{
public static void Firebase()
{
// Set up the Editor before calling into the realtime database.
FirebaseApp.DefaultInstance.SetEditorDatabaseUrl("FIREBASEWEBSITEURL");
// Get the root reference location of the database.
DatabaseReference reference =
FirebaseDatabase.DefaultInstance.RootReference;
FirebaseDatabase.DefaultInstance
.GetReference("allRoundData")
.GetValueAsync().ContinueWith(task => {
if (task.IsFaulted)
{
// Handle the error...
}
else if (task.IsCompleted)
{
DataSnapshot snapshot = task.Result;
// Do something with snapshot...
}
});
}
}
public class DataController : MonoBehaviour
{
private RoundData[] allRoundData;
private PlayerProgress playerProgress;
private string gameDataFileName = "data.json";
// Use this for initialization
void Start()
{
DontDestroyOnLoad(gameObject);
LoadGameData();
LoadPlayerProgress();
SceneManager.LoadScene("MenuScreen");
}
public RoundData GetCurrentRoundData()
{
return allRoundData[0];
}
public void SubmitNewPlayerScore(int newScore)
{
if (newScore > playerProgress.highestScore)
{
playerProgress.highestScore = newScore;
SavePlayerProgress();
}
}
public int GetHighestPlayerScore()
{
return playerProgress.highestScore;
}
// Update is called once per frame
void Update()
{
}
private void LoadPlayerProgress()
{
playerProgress = new PlayerProgress();
if (PlayerPrefs.HasKey("highestScore"))
{
playerProgress.highestScore = PlayerPrefs.GetInt("highestScore");
}
}
private void SavePlayerProgress()
{
PlayerPrefs.SetInt("highestScore", playerProgress.highestScore);
}
private void LoadGameData()
{
string filePath = Path.Combine(Application.streamingAssetsPath, gameDataFileName);
if (File.Exists(filePath))
{
string dataAsJson = File.ReadAllText(filePath);
GameData loadedData = JsonUtility.FromJson<GameData>(dataAsJson);
allRoundData = loadedData.allRoundData;
}
else
{
Debug.LogError("Cannot load game data!");
}
}
}