在Unity的Application.logMessageReceived回调中调用Debug.Log是否会引发递归?
你的判断完全正确,这段Unity代码会引发无限递归
先看你提供的代码:
using UnityEngine; void Awake() { Application.logMessageReceived += callback; } void Start() { Debug.Log("Start"); } void callback(string condition, string stackTrace, LogType type) { Debug.Log("Hello world"); }
原因很直接:
Application.logMessageReceived事件的触发逻辑是任何通过Unity日志系统输出的内容(包括Debug.Log)都会触发这个事件- 当
Start方法里的Debug.Log("Start")执行时,会触发callback - 而
callback内部又调用了Debug.Log("Hello world"),这会再次触发logMessageReceived事件,进而再次执行callback - 这个循环会无限重复,直到调用栈溢出,最终导致程序崩溃
内容的提问来源于stack exchange,提问作者SoulSystem
相关产品推荐
相关产品推荐

