Unity无法连接Firebase实时数据库,进入Play模式卡死求助
问题
已确认Unity本身无异常,项目中无死循环脚本。跟随Firebase官方YouTube的Unity教程第一部分操作后,进入Play模式出现无限加载。已按Firebase Unity官方配置文档完成配置,但仍无法连接实时数据库和Firebase Analytics,怀疑是依赖项问题。以下是写入实时数据库的脚本,需要排查修复以实现用实时数据库存储应用数据。
using Firebase; using Firebase.Analytics; using Firebase.Database; using Firebase.Extensions; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; public class CheckDepency : MonoBehaviour { private DatabaseReference databaseReference; private void Awake() { FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => { if (task.Result == DependencyStatus.Available) { // Set up the database reference databaseReference = FirebaseDatabase.DefaultInstance.RootReference; } else { Debug.LogError("Failed to initialize Firebase: " + task.Result); } }); } private void Start() { // Example usage: write data to the database WriteDataToDatabase("exampleNode", "Hello, Firebase!"); } private void WriteDataToDatabase(string path, string data) { // Create a new child reference under the root reference DatabaseReference childReference = databaseReference.Child(path); // Set the value of the child reference asynchronously childReference.SetValueAsync(data).ContinueWith(task => { if (task.IsCompleted) { Debug.Log("Data written to the database successfully!"); } else if (task.IsFaulted) { Debug.LogError("Failed to write data to the database: " + task.Exception); } }); } }
排查与修复方案
核心问题定位
原脚本存在两个关键问题:
- Firebase异步任务未在Unity主线程执行,导致Unity API调用异常,引发加载阻塞
- 数据库写入操作在Firebase依赖初始化完成前执行,产生空引用错误
修正后的脚本
using Firebase; using Firebase.Analytics; using Firebase.Database; using Firebase.Extensions; using UnityEngine; public class CheckDependency : MonoBehaviour { private DatabaseReference databaseReference; private void Awake() { // 使用ContinueWithOnMainThread确保回调在Unity主线程执行 FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task => { if (task.Result == DependencyStatus.Available) { databaseReference = FirebaseDatabase.DefaultInstance.RootReference; // 依赖初始化完成后再执行数据库操作 WriteDataToDatabase("exampleNode", "Hello, Firebase!"); // 启用Analytics数据收集 FirebaseAnalytics.SetAnalyticsCollectionEnabled(true); } else { Debug.LogError($"Firebase初始化失败: {task.Result}"); } }); } private void WriteDataToDatabase(string path, string data) { // 提前检查引用是否初始化,避免空引用错误 if (databaseReference == null) { Debug.LogError("数据库引用未初始化"); return; } DatabaseReference childReference = databaseReference.Child(path); // 同样在主线程处理写入结果 childReference.SetValueAsync(data).ContinueWithOnMainThread(task => { if (task.IsCompleted) { Debug.Log("数据写入成功!"); } else if (task.IsFaulted) { Debug.LogError($"数据写入失败: {task.Exception}"); } }); } }
额外排查项
- 确认实时数据库规则允许读写(开发阶段可临时设置为
{ "rules": { ".read": true, ".write": true } },上线后需配置安全规则) - 检查Firebase SDK版本与教程版本匹配,避免版本兼容问题
- 确认
google-services.json文件已正确放置在Unity项目的Assets目录下 - 查看Unity Console的Firebase相关错误日志,定位具体异常信息
内容的提问来源于stack exchange,提问作者Salman Alfarisi
相关产品推荐
相关产品推荐

