捕获Unity中的所有exception

我在应用程序商店中有一个Unity手机游戏,我有一个function,可以将玩家的电子邮件发送到我的服务器,通知我发生的事情,这不应该发生。 如果我写的try失败了,我会给自己发一封电子邮件,看看肯定有错误。

是否有可能构建类似OnException处理程序的东西,它会向我发送每个发生的exception的电子邮件,包括我没写的代码? 有些例外可能来自我使用的插件,所以我希望有一些Listener,当任何类型的exception被调用时它会发生。

那可能吗?

无法捕获其他插件中的所有其他exception。 Unity在后台执行此操作,Unity为您提供API以接收它捕获的exception:

较新版本的Unity

 void OnEnable() { Application.logMessageReceived += LogCallback; } //Called when there is an exception void LogCallback(string condition, string stackTrace, LogType type) { //Send Email } void OnDisable() { Application.logMessageReceived -= LogCallback; } 

较早版本的Unity

 void OnEnable() { Application.RegisterLogCallback(LogCallback); } //Called when there is an exception void LogCallback(string condition, string stackTrace, LogType type) { //Send Email } void OnDisable() { Application.RegisterLogCallback(null); } 

还有logMessageReceivedThreaded

编辑

Stacktrace问题

如果stackTrace参数为空,那么您可以使用System.Diagnostics.StackTrace类在LogCallback函数内部手动检索LogCallback 。 例如,

 void LogCallback(string condition, string stackTrace, LogType type) { //Send Email System.Diagnostics.StackTrace sTrace = new System.Diagnostics.StackTrace(); Debug.Log(sTrace.ToString()); } 

尝试这个解决方案,应该适用于您的情况:

http://answers.unity3d.com/questions/47659/callback-for-unhandled-exceptions.html

看看曲棍球应用程序 。 非常好的工具,拥有Unity sdk并完全满足您的需求。 每个Debug.LogError或Debug.LogException都会在那里报告。 因此,您不仅可以收到有关代码exception的通知,还可以通知您丢失的某些数据或者您要报告为错误的任何内容。