Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在编辑器脚本中使用Firebase函数_C#_Firebase_Unity3d_Firebase Realtime Database - Fatal编程技术网

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

C# 在编辑器脚本中使用Firebase函数,c#,firebase,unity3d,firebase-realtime-database,C#,Firebase,Unity3d,Firebase Realtime Database,我做了一些研究,现在有点紧张。 我想使用Firebase数据库函数在Unity上的编辑器脚本中编写数据 我设法在运行时很容易地读/写数据库(在线文档很棒!),但当我试图在编辑时读/写数据库时,它不起作用 我有一个非常明显的错误:“请注意,DontDestroyOnLoad只能在播放模式下使用,因此不能作为编辑器脚本的一部分。” 考虑到这个错误,这里似乎不可能使用Firebase函数。但是有人设法使用了它吗 我现在能想到的唯一解决方案是编写一个python脚本并从unity编辑器中启动它,但在一个

我做了一些研究,现在有点紧张。 我想使用Firebase数据库函数在Unity上的编辑器脚本中编写数据

我设法在运行时很容易地读/写数据库(在线文档很棒!),但当我试图在编辑时读/写数据库时,它不起作用

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

考虑到这个错误,这里似乎不可能使用Firebase函数。但是有人设法使用了它吗

我现在能想到的唯一解决方案是编写一个python脚本并从unity编辑器中启动它,但在一个工业项目中必须处理大量的语言(除非您别无选择),这并不是很方便

感谢阅读,并为所有的语法错误感到抱歉!
Louis

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

FirebaseApp firebaseApp = FirebaseApp.Create(
    FirebaseApp.DefaultInstance.Options, 
    "FIREBASE_EDITOR");
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;
}
第二个是使用此firebaseApp实例设置引用(DatabaseReference、StorageReference等),并且仅在firebaseApp.CheckAndFixDependenciesAsync()之后使用它

总体代码如下所示:

FirebaseApp firebaseApp = FirebaseApp.Create(
    FirebaseApp.DefaultInstance.Options, 
    "FIREBASE_EDITOR");
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

我不能说100%,但我怀疑这是可能的——我使用过的大多数插件都是在运行时初始化的,在发送任何请求之前都需要初始化。在编辑器模式下编写脚本的问题是,大多数脚本依赖于例程和特殊的单行为方法,如更新、启动等,它们在编辑器模式下的工作方式不同(如更新),或者根本不工作。如果有可能的话,它很可能需要大量肮脏的黑客和变通方法。我建议使用python脚本。谢谢你的回答,这也是我的想法,但我希望有人有一个超级技巧!我决定使用java脚本,但它与python脚本几乎相同!就像我说的,即使有人有这个把戏,从长远来看,它可能是非常肮脏和无法维护的。制作一个单独的脚本是一个不错的选择,不要害怕使用适合工作的工具,因为你在这方面的经验较少:)