如何从Unity / C中的Firebase实时数据库获取数据#

时间:2017-12-31 04:23:09

标签: c# firebase unity3d firebase-realtime-database unity5

我在团结项目中使用firebase。我在start方法中有一个变量prodId,它将从firebase中分配/获取。我插入一个显示prodId值的2个Debug.Logs。我想要的是prodId的第一个Debug.Log首先被调用但发生的事情是第一个调用第二个Debug.Log。这就像我希望在firebase获取数据后第二次日志发生。

这是代码

public class Liquor : MonoBehaviour
{

    public GameObject[] gameObjects = new GameObject[24];
    public Material[] materialsI = new Material[3];

    // Use this for initialization
    void Start()
    {
        FirebaseApp.DefaultInstance.SetEditorDatabaseUrl("https://shoplive-39a4f.firebaseio.com/");
        DatabaseReference reference = FirebaseDatabase.DefaultInstance.RootReference;
        GameObject gameObject = new GameObject();
        string prodId=null;
        FirebaseDatabase.DefaultInstance
          .GetReference("products").Child(name)
          .GetValueAsync().ContinueWith(task => {
              if (task.IsFaulted)
              {
                  print("error"); // Handle the error...
              }
              else if (task.IsCompleted)
              {
                  DataSnapshot prod  = task.Result;
                  var values = prod.Value as Dictionary<string, object>;
                  foreach(var v in values)
                  {
                      if(v.Key=="prodId")
                      {
                          prodId = v.Value.ToString();
                          **Debug.Log(prodId);**
                      }
                  }

              }
          });


        //reference.Child("products").Child(product.prodId).SetRawJsonValueAsync(json);
        int productId = Int32.Parse(name);
        if(productId >=2 && productId <=4)
        {
            gameObject = Resources.Load("Prefabs/Liquor/beer2") as GameObject;
        } 
        if(productId >=7 && productId <=9)
        {
            gameObject = Resources.Load("Prefabs/Liquor/wine") as GameObject;
        }

        Vector3 tempPos = transform.position;
        float distZ = 0.023f;
        float distX = 0.027f;
        char[] productInfos = name.ToCharArray();
        int shelfGroup = productInfos[0];
        int row = productInfos[1];
        int col = productInfos[2];
        for (int i = 1; i < 11; i++)
        {
            gameObjects[i] = Instantiate(gameObject) as GameObject;
            gameObjects[i].transform.position = new Vector3(tempPos.x, tempPos.y, tempPos.z +distZ);
            **Debug.Log(prodId + "sample");**
            distZ += 0.023f;
        }
    }

1 个答案:

答案 0 :(得分:0)

通常将数据发送到Firebase服务器,等待响应需要一些时间。 这就是为什么您的Debug.Log(prodId);行迟到的原因。 建议您将其他行放在Debug.Log(prodId);行的下方。