在开发的过程中,为了防止游戏运行产生异常信息,可以借助unity为我们提供的log回调方法,判断运行过程中是否产生意外状况,比如游戏运行过程中产生一些异常错误,我们可以通过该方法,对异常进行处理,或者产生一个弹框,告诉玩家游戏产生异常,需要重新登录或者其他的相关操作。
需要使用的方法为;
方法1:Application.RegisterLogCallback
static function RegisterLogCallback (handler : Application.LogCallback) : void
在一个日志信息上注册一个委托来被调用,这个函数和RegisterLogCallback唯
方法2:Application.RegisterLogCallbackThreaded
static function RegisterLogCallbackThreaded (handler : Application.LogCallback) : void
在一个日志信息上注册一个委托来被调用,这个函数和RegisterLogCallback唯一不同的是,这个函数将从不同的线程被调用,注意:你只有你知道你在做什么时才能使用这个函数,否则使用Application.RegisterLogCallback。
两个方法在使用的时候,都需要传递一个委托
public delegate void LogCallback (string condition, string stackTrace, LogType type);
第一个参数为日志描述信息,第二个参数为日志产生的栈数据,第三个参数为日志的类型
使用方法demo
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class LogTEST : MonoBehaviour {
string message="";
public Text text;//UGUI的一个文本
// Use this for initialization
void Start () {
//在一个日志信息上注册一个委托来被调用
Application.RegisterLogCallback (MyLogCallback);
}
// Update is called once per frame
void Update () {
text.text = message;
}
/// <summary>
/// log callback check
/// </summary>
/// <param name="condition">log内容.</param>
/// <param name="stackTrace">log产生的栈数据追踪</param>
/// <param name="type">log的类型.</param>
void MyLogCallback (string condition, string stackTrace, LogType type){
switch(type){
case LogType.Assert:
message += " receive an assert log"+",condition="+condition+",stackTrace="+stackTrace;
break;
case LogType.Error:
message += " receive an Error log"+",condition="+condition+",stackTrace="+stackTrace;
break;
case LogType.Exception:
message += " receive an Exception log"+",condition="+condition+",stackTrace="+stackTrace;
break;
case LogType.Log:
message += " receive an Log log"+",condition="+condition+",stackTrace="+stackTrace;
break;
case LogType.Warning:
message += " receive an Warning log"+",condition="+condition+",stackTrace="+stackTrace;
break;
}
}
void OnGUI(){
if(GUI.Button(new Rect(10,20,200,40),"assert")){
Debug.LogAssertion ("assertion");
}else if(GUI.Button(new Rect(10,80,200,40),"error")){
Debug.LogError ("error");
}else if(GUI.Button(new Rect(10,140,200,40),"exception")){
Debug.LogException (new System.NullReferenceException());
}else if(GUI.Button(new Rect(10,200,200,40),"log")){
Debug.Log ("log");
}else if(GUI.Button(new Rect(10,260,200,40),"warning")){
Debug.LogWarning ("waring");
}
}
}