我不知道我在做什么错,但是Unity在单击“播放”按钮后冻结了几秒钟。首先,处理器上有负载,然后负载消失了。
几次重新安装Unity以及Firebase SDK。
如果您禁用与Firebase交互的脚本,则统一工作正常。
我正在使用Firebase Analytics和Firebase数据库。
代码:
using Firebase;
using Firebase.Database;
using Firebase.Extensions;
using Firebase.Unity.Editor;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;
using UnityEditor;
using UnityEngine.SceneManagement;
using Random = UnityEngine.Random;
using System.Linq;
using System.Security.Cryptography;
using UnityEngine.Assertions.Must;
public class Leaderboard : MonoBehaviour
{
public DataScript data = new DataScript();
DatabaseReference reference;
public GameObject unavailable;
public GameObject available;
public Text code;
public List<Player> player;
public Transform content;
public GameObject prefab;
LeaderPrefab lf;
public List<GameObject> pr;
int i = 0;
public InputField iF;
public GameObject changePan;
public Text Nickname;
public Text Id;
public Text Score;
void Start()
{
//data = FindObjectOfType<DataScript>();
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
var dependencyStatus = task.Result;
if (dependencyStatus == Firebase.DependencyStatus.Available)
{
Debug.Log("Server is available");
available.SetActive(true);
unavailable.SetActive(false);
}
else
{
UnityEngine.Debug.LogError(System.String.Format(
"Could not resolve all Firebase dependencies: {0}", dependencyStatus));
available.SetActive(false);
unavailable.SetActive(true);
code.text = "Server has some errors. Try again later";
}
});
#region Server Instance and Server Status
Debug.Log("StartCheck");
FirebaseApp.DefaultInstance.SetEditorDatabaseUrl("https://troubles-detex.firebaseio.com/");
reference = FirebaseDatabase.DefaultInstance.RootReference;
if (reference.Child("Server Status") == null)
{
reference.Child("Server Status").Child("Available").SetValueAsync("true");
}
string returnedCode = reference.Child("Server Status").Child("Available").GetValueAsync().ToString();
if (returnedCode == "false")
{
available.SetActive(false);
unavailable.SetActive(true);
code.text = "Server is temporarily unavailable.";
Debug.Log("Server is temporarily unavailable.");
return;
}
if (returnedCode == "maintenance")
{
available.SetActive(false);
unavailable.SetActive(true);
code.text = "Server under maintenance. Try again later.";
Debug.Log("Server under maintenance. Try again later.");
return;
}
Debug.Log("Checked");
#endregionenter image description here
reference.Child("User").ValueChanged +=
(object sender2, ValueChangedEventArgs e2) =>
{
#region if database is broken
if (e2.DatabaseError != null)
{
Debug.LogError(e2.DatabaseError.Message);
return;
}
#endregion
Debug.Log("Lets go");
if (e2.Snapshot != null && e2.Snapshot.ChildrenCount > 0)
{
Debug.Log("all is good");
#region Clear old
player.Clear();
pr = GameObject.FindGameObjectsWithTag("leader").ToList();
foreach(GameObject p in pr)
{
Destroy(p);
}
#endregion
#region Display leaders
foreach (DataSnapshot childSnapshot in e2.Snapshot.Children)
{
var name1 = childSnapshot.Child("Nickname").Value.ToString();
var id1 = childSnapshot.Child("Id").Value.ToString();
var score1 = childSnapshot.Child("Score").Value.ToString();
player.Add(new Player() { name = name1, id = id1, score = int.Parse(score1) });
}
player = player.OrderByDescending(playerR => playerR.score).ToList();
foreach(Player pl in player)
{
if (i == 50) return;
ShowLeaders(pl.name, pl.id, pl.score.ToString());
i++;
}
#endregion
}
};
#region Show us
if ((reference.Child("User").Child("nick") + data.ReadString("id")) != null)
{
Debug.Log("Show us", this);
Nickname.text = reference.Child("User").Child(data.ReadString("nick") + data.ReadString("id")).Child("Nickname").GetValueAsync().Result.Value.ToString();
Id.text = reference.Child("User").Child(data.ReadString("nick") + data.ReadString("id")).Child("Id").GetValueAsync().ToString();
Score.text = reference.Child("User").Child(data.ReadString("nick") + data.ReadString("id")).Child("Score").GetValueAsync().ToString();
}
else
{
Register();
}
#endregion
}
public void ChangeNickname()
{
Debug.Log("LAST NAME WAS " + data.ReadString("nick"));
reference.Child("User").Child(data.ReadString("nick") + data.ReadString("id")).RemoveValueAsync();
reference.Child("User").Child(iF.text + data.ReadString("id")).Child("Nickname").SetValueAsync(iF.text);
reference.Child("User").Child(iF.text + data.ReadString("id")).Child("Id").SetValueAsync(data.ReadString("id"));
reference.Child("User").Child(iF.text + data.ReadString("id")).Child("Score").SetValueAsync(data.ReadString("score"));
}
public void Open()
{
changePan.SetActive(!changePan.activeInHierarchy);
}
public void Register()
{
print("Register");
int i = Random.Range(1, 100000);
data.Write("id", i);
reference.Child("User").Child("Player" + i).Child("Nickname").SetValueAsync("Player" + i.ToString());
reference.Child("User").Child("Player" + i).Child("Id").SetValueAsync(i.ToString());
reference.Child("User").Child("Player" + i).Child("Score").SetValueAsync("0");
}
public void CreateNew()
{
if(reference == null)
{
FirebaseApp.DefaultInstance.SetEditorDatabaseUrl("https://troubles-detex.firebaseio.com/");
reference = FirebaseDatabase.DefaultInstance.RootReference;
Debug.Log("Ready");
}
int a = Random.Range(1, 100);
int b = Random.Range(1, 100000);
int c = Random.Range(1, 1000);
reference.Child("User").Child("Test" + a).Child("Nickname").SetValueAsync("Test" + a);
reference.Child("User").Child("Test" + a).Child("Id").SetValueAsync(b.ToString());
reference.Child("User").Child("Test" + a).Child("Score").SetValueAsync(c.ToString());
}
public void ShowLeaders(string nname, string id1, string scorea)
{
GameObject go = Instantiate(prefab, content);
lf = go.GetComponent<LeaderPrefab>();
lf.nickname.text = nname;
lf.idT.text = id1;
lf.scoreT.text = scorea;
}
}
[System.Serializable]
public class Player
{
public string name;
public string id;
public int score;
}