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

Unity集成Firebase实时数据库:游戏启动时如何读取数值数据?

Firebase Realtime Database读取问题排查建议(Unity Android游戏)

问题场景

开发Android平台第一人称3D游戏,使用Firebase Realtime Database存储数据,需求是游戏启动时读取根节点下room_timer→time_value的数值(2400秒),赋值给变量用于运行计时器。数据库仅包含该键值对,但以下代码未实现预期效果,需针对DataSnapshot及代码逻辑排查问题。

现有代码

public void ReadTimeValue()
{
    Debug.Log("read db function start");
    dbReference.GetValueAsync()
    .ContinueWithOnMainThread( Task => {
        if (Task.IsFaulted){
            Debug.Log("problem");
        }
        else if (Task.IsCompleted){
            DataSnapshot snapshot = Task.Result;
            Debug.Log(snapshot.Child("room_timer").Child("time_value").Value);
            time_value = (float)snapshot.Child("room_timer").Child("time_value").Value;
            Debug.Log("db import " + time_value);
        }
    });
    Debug.Log("read db function end");
} 

排查建议

1. 确认数据库引用路径正确性

  • 打印dbReference的实际路径,验证是否指向数据库根节点:
    Debug.Log("DB Reference Path: " + dbReference.Path);
    
    如果dbReference指向了子节点,那么Child("room_timer")会找不到目标数据。

2. 排查DataSnapshot读取有效性

  • 在Task.IsCompleted分支中,先打印完整快照内容,确认是否成功读取到数据:
    Debug.Log("Full Snapshot Data: " + snapshot.Value);
    
    • 若输出为null或空,优先检查数据库权限规则(开发阶段可临时设置为公开读写测试:{ "rules": { ".read": true, ".write": true } }),同时确认设备网络正常。
  • 严格核对节点名称:Firebase节点大小写敏感,确保数据库中节点名是room_timer和time_value,与代码中拼写完全一致。
  • 检查数据类型匹配:
    • 若数据库中time_value存储为字符串类型,直接强制转换float会报错,需先转字符串再解析:
      string timeStr = snapshot.Child("room_timer").Child("time_value").Value.ToString();
      time_value = float.TryParse(timeStr, out float result) ? result : 0f;
      
    • 建议数据库中直接存储数字类型(整数2400),避免类型转换问题。

3. 修复异步逻辑问题

  • ContinueWithOnMainThread是异步回调,代码中Debug.Log("read db function end");会先于回调执行,不要以此判断读取完成。计时器逻辑必须在time_value赋值完成后再启动(可在回调内调用计时器初始化方法)。
  • 优化错误日志,打印具体异常信息,方便定位问题:
    if (Task.IsFaulted){
        Debug.LogError("DB Read Failed: " + Task.Exception);
    }
    

4. 变量作用域验证

  • 确认time_value是类的成员变量(而非局部变量),否则回调内的赋值无法被外部代码访问。
  • 确保挂载该脚本的GameObject在游戏启动时处于激活状态,未被销毁。

内容的提问来源于stack exchange,提问作者Shai Segal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:51:28