C# 在编辑器脚本中使用Firebase函数
我做了一些研究,现在有点紧张。 我想使用Firebase数据库函数在Unity上的编辑器脚本中编写数据 我设法在运行时很容易地读/写数据库(在线文档很棒!),但当我试图在编辑时读/写数据库时,它不起作用 我有一个非常明显的错误:“请注意,DontDestroyOnLoad只能在播放模式下使用,因此不能作为编辑器脚本的一部分。” 考虑到这个错误,这里似乎不可能使用Firebase函数。但是有人设法使用了它吗 我现在能想到的唯一解决方案是编写一个python脚本并从unity编辑器中启动它,但在一个工业项目中必须处理大量的语言(除非您别无选择),这并不是很方便 感谢阅读,并为所有的语法错误感到抱歉!C# 在编辑器脚本中使用Firebase函数,c#,firebase,unity3d,firebase-realtime-database,C#,Firebase,Unity3d,Firebase Realtime Database,我做了一些研究,现在有点紧张。 我想使用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脚本几乎相同!就像我说的,即使有人有这个把戏,从长远来看,它可能是非常肮脏和无法维护的。制作一个单独的脚本是一个不错的选择,不要害怕使用适合工作的工具,因为你在这方面的经验较少:)