使用Firebase 6.15.0按下播放按钮后Unity冻结

时间:2020-06-07 21:30:45

标签: c# android firebase unity3d

我不知道我在做什么错,但是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;
}

https://prnt.sc/svjlzq https://prnt.sc/svjo43

0 个答案:

没有答案