【问题标题】:Using Firebase functions in an editor script在编辑器脚本中使用 Firebase 函数
【发布时间】:2018-07-08 00:52:54
【问题描述】:

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

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

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

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

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

感谢阅读,对所有语法错误深表歉意! 路易斯

【问题讨论】:

  • 我不能说 100%,但我怀疑它甚至可能 - 我使用过的大多数插件在运行时初始化,并且需要在发送任何请求之前进行初始化。在编辑器模式下编写脚本的问题在于,大多数脚本依赖于 couroutines 和特殊的 MonoBehavior 方法,如 Update、Start 等,它们在编辑器模式下的工作方式不同(如 Update)或根本不工作。如果可能的话,它很可能需要很多肮脏的黑客和解决方法。我建议使用 python 脚本。
  • 感谢您的回答,这也是我的想法,但我希望有人有一个超级技巧!我决定使用 java 脚本,但它与 python 脚本几乎相同!
  • 就像我说的那样,即使有人对此有技巧,从长远来看,它也可能非常肮脏且无法维护。制作一个单独的脚本是一个不错的选择,不要害怕使用正确的工具来完成这项工作,仅仅因为你在这方面的经验较少:)

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


【解决方案1】:

首先,您应该使用具有唯一名称的新 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。

【讨论】:

    猜你喜欢
    • 2019-10-11
    • 2023-03-23
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 2020-08-03
    相关资源
    最近更新 更多