最近几天一直在处理一个很神秘的bug,有天晚上因为这个bug还把我整破防了。这个bug在电脑端运行时不会出现而在手机端运行的时候就会立马跳出来。然而项目中并没有对应用运行平台进行差别化操作的代码,又由于是手机端的缘故报错无法显示出来,所以处理了好几天才找到端倪。(原来是手机性能不及电脑所以生成物体较慢一些导致的时差问题)现对我找出bug的方法进行总结,防止其他人在安卓端无法轻松发现bug而陷入困境。


UI准备

在场景中新建一个文本显示UI来接受debug的报错,如下图所示:

Unity 无确认提示窗口 unity错误提醒_Unity 无确认提示窗口


获取报错

将以下代码挂到场景任意物体上:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class NewBehaviourScript : MonoBehaviour
{
    public Text debug_text;
    void Awake()
    {
        get_error();
    }
    public void get_error()
    {
        Application.logMessageReceived += (string condition, string stackTrace, LogType type) =>     //绑定收到日志消息事件
        {
            if (type == LogType.Exception || type == LogType.Error)         //判断是否是异常或报错
            {
                debug_text.text = condition + "\n" + stackTrace;            //信息打印在屏幕上
            }
        };
    }
}

代码中debug_text是之前添加的文本UI,可以根据自己的需要更换成其他UI类型。
代码判断接受的日志信息是异常和错误类型,也可以根据需要添加其他类型的日志消息。
制造一个错误并打包测试下结果吧:

GameObject.Find("这是一个不存在的东西").GetComponent<SpriteRenderer>();

得到结果如下:

Unity 无确认提示窗口 unity错误提醒_bug_02


显示报错行数

上面得到的结果虽然知道是哪个函数报错了,但是还是不清楚具体在多少行。在体量比较大的函数中想要找到错误还是不太容易,但是只要在导出安装包的时候勾选这一项就行了(开发模式):

Unity 无确认提示窗口 unity错误提醒_android_03


结果如下:

Unity 无确认提示窗口 unity错误提醒_UI_04

以上就是该解决方案的大致过程,如果有什么问题或者更简便的方法可以在评论区留言。