You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);
            }
        });
    }

}

排查与修复方案

核心问题定位

原脚本存在两个关键问题:

  1. Firebase异步任务未在Unity主线程执行,导致Unity API调用异常,引发加载阻塞
  2. 数据库写入操作在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 22:38:26