Unity C#代码部分未执行:SetActive及后续代码无响应
Unity中Firebase异步回调代码执行中断问题排查
我在Unity中运行以下C#代码时,仅能输出日志“Snapshot Exsist 1”,但后续的ObjectToTurnOn.SetActive(true)、ObjectToTurnOFF.SetActive(false)以及Debug.Log("Snapshot Exsist 2")代码均未执行,且未出现任何报错信息,请问这些代码为何无法运行?
相关代码如下:
public void GetCompleteUserdata(string currUID){ Debug.Log("Going to get complete user data") DocumentReference docRef = db.Collection("users").Document(currUID); docRef.GetSnapshotAsync().ContinueWithOnMainThread(task => { DocumentSnapshot snapshot = task.Result; if (snapshot.Exists) { // DebugText.text = "Snapshot Exsist"; Debug.Log("Snapshot Exsist 1"); ObjectToTurnOn.SetActive(true); ObjectToTurnOFF.SetActive(false); Debug.Log("Snapshot Exsist 2"); } }); }
可能的原因及排查方案:
- 空引用异常被静默吞吃:
ObjectToTurnOn或ObjectToTurnOFF未在Inspector中赋值,执行SetActive时触发空引用异常,但Firebase的回调逻辑可能捕获了异常却没抛出,直接中断后续代码。可以在Debug.Log("Snapshot Exsist 1")后加日志检查对象状态:Debug.Log($"ObjectToTurnOn: {ObjectToTurnOn}, ObjectToTurnOFF: {ObjectToTurnOFF}"); - 主线程执行环境异常:虽然
ContinueWithOnMainThread确保回调在主线程执行,但极端情况下可能出现线程同步问题导致代码中断。可以尝试把UI操作包裹到Unity主线程调度逻辑中:Debug.Log("Snapshot Exsist 1"); Invoke(() => { ObjectToTurnOn.SetActive(true); ObjectToTurnOFF.SetActive(false); Debug.Log("Snapshot Exsist 2"); }, 0); - 回调内部异常未暴露:Firebase默认日志级别可能隐藏了内部异常,用
try-catch包裹代码块手动捕获异常,就能看到具体错误:if (snapshot.Exists) { Debug.Log("Snapshot Exsist 1"); try { ObjectToTurnOn.SetActive(true); ObjectToTurnOFF.SetActive(false); Debug.Log("Snapshot Exsist 2"); } catch (Exception e) { Debug.LogError($"回调执行出错: {e.Message}\n{e.StackTrace}"); } }
内容的提问来源于stack exchange,提问作者Savad
相关产品推荐
相关产品推荐

