unity 日志回调函数使用 RegisterLogCallback

在开发的过程中,为了防止游戏运行产生异常信息,可以借助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");
        }
    }
}
Unity中,回调函数是一种常见的编程模式,用于在特定事件发生时执行特定的代码。回调函数通常用于处理异步操作、事件触发和消息传递等情况。 Unity中的回调函数可以通过以下几种方式来实现: 1. 事件委托和事件:Unity中的事件系统允许你定义和触发自定义事件,并将回调函数附加到这些事件上。你可以使用事件委托来定义事件的签名,然后使用事件关键字创建事件。当事件被触发时,附加的回调函数将被调用。 2. MonoBehaviour生命周期函数:MonoBehaviour是Unity中所有脚本的基类,它提供了一系列生命周期函数,如Start、Update、FixedUpdate等。你可以重写这些函数,并在特定的时间点执行你的代码。例如,在Start函数中初始化游戏对象,在Update函数中更新游戏逻辑。 3. 委托和Lambda表达式:Unity也支持使用委托和Lambda表达式来实现回调函数。你可以定义一个委托类型,并将其作为参数传递给其他方法。然后,你可以使用Lambda表达式来创建匿名方法,并将其作为回调函数传递给委托。 4. UnityEvent:Unity还提供了UnityEvent类,它是一种可序列化的事件类型。你可以在脚本中声明一个UnityEvent类型的公共字段,并在Inspector面板中将回调函数附加到该事件上。当事件被触发时,附加的回调函数将被调用。 总结一下,Unity使用回调函数的方式包括事件委托和事件、MonoBehaviour生命周期函数、委托和Lambda表达式以及UnityEvent。这些方法可以帮助你在特定的事件发生时执行特定的代码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天涯过客TYGK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值