【发布时间】:2020-06-29 13:51:04
【问题描述】:
我正在 Unity 版本 2019.4.1f1 (LTS) 中构建游戏,并且我正在使用 Firebase Firestore 数据库。
基本上当我尝试从数据库中获取用户时,特别是当我调用GetSnapshotAsync() 时,它会卡住。
层次结构如下:StartState 调用FetchUserState,后者调用DBGetObjectState,后者与DatabaseManager 通信(DatabaseManager 包含调用GetSnapshotAsync() 的行)。
如果有人能帮我解决这个问题,那就太好了。 感谢您的帮助!
类 FetchUserState
//fetch user by userId
await stateManager.PushTempState(new DBGetObjectState<T>(StringConstants.DB_USERS_COLLECTION, //("Users")
field: "UserId", fieldEqualTo: _userId, withLoading: false));
类 DBGetObjectState
Log("Getting Documents");
var documents = await DatabaseManager.GetDocuments<T>(_path, _limit, _orderBy, _orderByDescending, _field, _fieldEqualTo);
Log("Got something, checking..."); // doesn't get here
类 DatabaseManager
public static async Task<Collection<T>> GetDocuments<T>(string path, int limit = -1,
string orderBy = null, string orderByDescending = null, string field = null, object fieldEqualTo = null)
{
var collectionRef = DBUtills.GetCollectionRef(path);
Query query = collectionRef;
if (field != null && fieldEqualTo != null)
query = query.WhereEqualTo(field, fieldEqualTo);
if (orderBy != null)
query = query.OrderBy(orderBy);
if (orderByDescending != null)
query = query.OrderByDescending(orderByDescending);
if (limit >= 0)
query = query.Limit(limit);
Debug.Log("Snapshotting!");
QuerySnapshot collectionSnapshot = await query.GetSnapshotAsync();
Debug.Log("got a snapshot, checking..."); // doesn't get here
//....
}
【问题讨论】:
-
你确定你的回调是在 Unity 主线程上执行的吗?不如试试
ContinueWithOnMainThread -
@derHugo 感谢您的帮助,您完全正确,就是这样。猜猜我会从现在开始使用它。
-
请在帖子中添加解决方案作为答案,这将有助于社区成员检查此问题的解决方案。
标签: c# firebase unity3d google-cloud-firestore