Application.RegisterLogCallback を使うと例外発生時にコールバック関数が呼ばれるように設定可能です。
C# のサンプルはこの様になります。空の GameObject を作成し、貼り付けた後に実行してみて下さい。
using UnityEngine; using System.Collections; public class Test : MonoBehaviour { string _condition = ""; string _stackTrace = ""; string _type = ""; string num = ""; string res = ""; void OnEnable () { Application.RegisterLogCallback (HandleLog); } void OnDisable () { Application.RegisterLogCallback (null); } void HandleLog (string condition, string stackTrace, LogType type) { _condition = condition; _stackTrace = stackTrace; _type = type.ToString(); } void OnGUI () { num = GUI.TextField (new Rect (10, 10, 100, 50), num); GUI.Label (new Rect (120, 10, 100, 50), res); if (GUI.Button (new Rect (10, 70, 150, 50), "test")) { res = (10 / int.Parse(num)).ToString(); } GUI.TextArea (new Rect (10, 130, 300, 200), "condition : " + _condition + "\nstackTrace : " + _stackTrace + "\ntype : " + _type); } }
このサンプルでは TextField に未入力で「Test」ボタンを押すと int.Parse() のタイミングで以下の様に例外が発生し、コールバックが行われた事を確認出来ます。
TextField に 0 を指定すると DivideByZeroException が発生し、以下の様な結果と成ります。
もちろん名前の通り、ログの出力時にもコールバックが呼ばれます。例えば Debug.Log("hoge") を実行したタイミングで以下の様なコールバックが発生します。
実行ファイル上で Debug.Log() の値が取得したい時などに便利です。
関連情報
Unity Script Reference – Application.RegisterLogCallback
http://docs.unity3d.com/Documentation/ScriptReference/Application.RegisterLogCallback.html