在编辑器脚本中使用Firebase函数

时间:2018-01-29 10:45:51

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

我做了一些研究,现在我正在努力奋斗。 我想使用Firebase数据库函数在Unity上的编辑器脚本中写入数据。

我在运行期间很容易在数据库中读/写(在线doc很棒!),但是当我尝试在编辑时执行它时,它无效。

我有一个非常明确的错误:"请注意,DontDestroyOnLoad只能在播放模式下使用,因此不能成为编辑器脚本的一部分。"

考虑到此错误,似乎无法在此处使用Firebase功能。但有人设法使用它吗?

我现在能想到的唯一解决方案是编写一个python脚本并从统一编辑器中启动它,但是在工业项目中处理大量语言并不是很有说服力(除非你没有选择)。

感谢阅读并抱歉所有的语法错误! 路易斯

1 个答案:

答案 0 :(得分:0)

首先,您应该使用具有唯一名称的FirebaseApp的新实例来初始化firebase。我是这样的:

FirebaseApp firebaseApp = FirebaseApp.Create(
    FirebaseApp.DefaultInstance.Options, 
    "FIREBASE_EDITOR");

第二个是与此firebaseApp实例的设置引用(DatabaseReference,StorageReference等),并且仅在FirebaseApp.CheckAndFixDependenciesAsync()之后使用它

总体代码如下:

public static void Initialize(bool isEditor = false)
{
    if (isEditor)
    {
        FirebaseApp firebaseApp = FirebaseApp.Create(
            FirebaseApp.DefaultInstance.Options, 
            "FIREBASE_EDITOR");

        firebaseApp.SetEditorDatabaseUrl("https://project.firebaseio.com/");

        FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task =>
        {
            if (task.Result == DependencyStatus.Available)
            {
                database = FirebaseDatabase.GetInstance(firebaseApp).RootReference;
                storage = FirebaseStorage.GetInstance(firebaseApp).RootReference;
                auth = FirebaseAuth.GetAuth(firebaseApp);
            }
            else
            {
                Debug.LogError(
                    "Could not resolve all Firebase dependencies: " + task.Result);
            }
        });
    }
    else
    {
        FirebaseApp.DefaultInstance.SetEditorDatabaseUrl("https://project.firebaseio.com/");

        database = FirebaseDatabase.DefaultInstance.RootReference;
        storage = FirebaseStorage.DefaultInstance.RootReference;
        auth = FirebaseAuth.DefaultInstance;
    }

    IsInitialized = true;
}

在获取/设置数据之前初始化用于编辑器的SDK:

FirebaseManager.Initialize(true);

然后在CheckAndFixDependenciesAsync回调之后,可以在编辑器脚本中使用Firebase。