Unity输出带点击跳转功能的Log实现技巧详解

目录
  • 正文
  • 不带点击跳转的Log
  • 带点击跳转的Log

正文

在平常的Unity开发过程中,可能会遇到如:

1.使用Debug.Log替代输出异常信息;

2.调试代码时,源代码在try{}代码块内有较多或深层的调用;

3.想在输出的Log中提示或是引导其他开发人员打开指定的脚本等情景。

在上述情景中,Debug.Log输出的Log一般都是不带点击跳转功能的,使得我们需要在长长的Log中寻找目标文件,然后再对照着文件名,方法名在IDE中点开,并不是很方便。

不带点击跳转的Log

public static void TestFunc() {
    try {
        TestCall_1("", 0);
    } catch (System.Exception e) {
        // 平时使用Debug输出的Log是不带点击跳转的
        Debug.LogError(e.ToString());
    }
}

输出结果

如果在try catch中做了很复杂的操作,这样的Log将会又长又乱

后来经过反复比对带点击跳转和不带点击跳转的两行Log,发现了Unity识别这种跳转路径的基本格式为:()[空格](at X:0),(空格不能省略)。因此只要把要跳转的脚本路径照这个格式封装就能实现高亮点击跳转了。下面是演示代码。

带点击跳转的Log

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.Text.RegularExpressions;
​​​​​​​public class TestEditor {
    [MenuItem("测试/打印异常")]
    public static void TestFunc() {
        try {
            TestCall_1("", 0);
        } catch (System.Exception e) {
            string output = "使Log带跳转功能 \n";
            // 1.这是能被识别为带点击跳转的格式:() (at XXX:0)
            output += "() (at X:0) \n";
             // 2.可以是绝对路径,但格式好像只能是.cs文件,若.cs文件不存在,则会在IDE中打开一个新文档
            output += "() (at " + @"C:/Users/7_erQ/Desktop/test.cs" + ":0) \n";

            // 3.用正则替换原Log为 XXX.xxx() (at XXX.cs:nnn)的格式,就能使Log带跳转功能了
            // 原Log:  at TestEditor.TestCall_4 (System.String arg1, System.Int32 arg2) [0x00001] in F:\WorkStation\CodeSpace\UnityProjects\AssetLinkMapDemo\Assets\Temp\Editor\TestEditor.cs:41
            // 替换后:  at TestEditor.TestCall_4 (System.String arg1, System.Int32 arg2) (at F:\WorkStation\CodeSpace\UnityProjects\AssetLinkMapDemo\Assets\Temp\Editor\TestEditor.cs:42)
            Regex reg = new Regex(@"\)\s\[0x[0-9,a-f]*\]\sin\s(.*:[0-9]*)\s");
            output += reg.Replace(e.ToString(), ") (at $1) ");
            Debug.LogError(output);
        }
    }

    public static void TestCall_1(string arg1, int arg2) {
        TestCall_2(arg1, arg2);
    }

    public static void TestCall_2(string arg1, int arg2) {
        TestCall_3(arg1, arg2);
    }

    public static void TestCall_3(string arg1, int arg2) {
        TestCall_4(arg1, arg2);
    }

    public static void TestCall_4(string arg1, int arg2) {
        throw new System.Exception();
    }
}

输出结果

带点击跳转的Log

这样就可以直接点开定位到目标文件和方法了 作者:7_erQ https://www.bilibili.com/read/cv15464238 出处:bilibili

以上就是Unity输出带点击跳转功能的Log实现技巧详解的详细内容,更多关于Unity输出点击跳转Log的资料请关注我们其它相关文章!

(0)

相关推荐

  • 如何保存Unity中的Log日志

    代码中的debug日志保存本地 using System.Collections; using UnityEngine; using System.IO; public class SaveLog : MonoBehaviour { private float length; Queue queue; private void Awake() { DontDestroyOnLoad(this); LogToFile("Version of the runtime: " + Applic

  • unity android设备上查看log输出方式

    使用[adb] logcat [option] - [filter-spec] - 命令. 1. -s 指定过滤器 adb logcat -s Unity ActivityManager PackageManager dalvikvm DEBUG 2. 如果出现error: more than one device/emulator,需要adb -s deviceName指定设备 adb devices 得到设备名 MyAndroid adb -s MyAndroid logcat -s Uni

  • Unity 百度AI实现Logo商标识别

    接口介绍: 该请求用于检测和识别图片中的品牌LOGO信息.即对于输入的一张图片(可正常解码,且长宽比适宜),输出图片中LOGO的名称.位置和置信度.当效果欠佳时,可以建立子库(在百度开发者中心控制台创建应用并申请建库)并通过调用logo入口接口完成自定义logo入库,提高识别效果. 创建应用: 在产品服务中搜索图像识别,创建应用,获取AppID.APIKey.SecretKey信息: 查阅官方文档,以下是Logo商标识别接口返回数据参数详情: 定义数据结构: using System; ///

  • Unity PC版Log的具体位置介绍

    在某个版本更新后,Unity Log不在位于Data文件夹中 具体位置: C:\Users\xxx用户\AppData\LocalLow\xx公司\xx项目 补充:UnityWebPlayer 的log日志的本地路径 在unity网页端的开发中,常常用到UnityWebPlayer的技术进行制作.在Unity中我们可以通过引擎自带的日志输出工具进行调试. 网页端在哪里查看log日志呢? 就在本地的此路径下 C:\Users\Administrator\AppData\Local\Temp\Uni

  • Unity输出带点击跳转功能的Log实现技巧详解

    目录 正文 不带点击跳转的Log 带点击跳转的Log 正文 在平常的Unity开发过程中,可能会遇到如: 1.使用Debug.Log替代输出异常信息: 2.调试代码时,源代码在try{}代码块内有较多或深层的调用: 3.想在输出的Log中提示或是引导其他开发人员打开指定的脚本等情景. 在上述情景中,Debug.Log输出的Log一般都是不带点击跳转功能的,使得我们需要在长长的Log中寻找目标文件,然后再对照着文件名,方法名在IDE中点开,并不是很方便. 不带点击跳转的Log public sta

  • 微信小程序 点击控件后选中其它反选实例详解

    微信小程序 点击控件后选中其它反选实例详解 前言: 如果需要实现进来进行给按钮加上买一送一的样式,或者单击就选中单个按钮,只能靠css结合js进行控制了,小程序暂时没有这样的控件. 实现效果图: 微信小程序进来的时候自动进行按钮样式的初始化,这个需要一个字段做判断,加上正则表达式wxml文件: <block wx:for="{{liuliangItems}}"> <block wx:if="{{item.one2one == 1}}"> &l

  • JavaScript中的ajax功能的概念和示例详解

    AJAX即"Asynchronous Javascript And XML"(异步JavaScript和XML). 个人理解:ajax就是无刷新提交,然后得到返回内容. 对应的不使用ajax时的传统网页如果需要更新内容(或用php做处理时),必须重载整个网页页面. 示例: html代码如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>

  • iOS新功能引导提示界面实例详解

    在开发中,现在很多app更新了新功能时都会给出用户一个提示,以方便用户更好的体验,那么这个功能如何实现的呢? 首先看下效果图: 1.首先创建第一个viewcontroller 在上面放上一个imageview和一个按钮 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. UIImageView *imageview=[[UIImageView alloc]ini

  • Android 两个Fragment之间的跳转和数据的传递实例详解

    Android  两个Fragment之间的跳转和数据的传递实例详解 作为一个Android的菜鸟,前些天在做项目的时候用到了fragment,需求是从一个Fragment跳转到另一个Fragment,并且还要传递数据,就像Activity的跳转一样.在网上找了好久都没找到很好的列子,最后通过看别人的博客和查文档终于做好了,现在整理一下,希望能帮助有需要的童鞋. 1.首先在第一个Fragment 里面拿到FragmentManger 和FragmentTransaction 代码如下. @Ove

  • Rxjava功能操作符的使用方法详解

    Rxjava功能个人感觉很好用,里面的一些操作符很方便,Rxjava有:被观察者,观察者,订阅者, 被观察者通过订阅者订阅观察者,从而实现观察者监听被观察者返回的数据 下面把Rxjava常用的模型代码列出来,还有一些操作符的运用: 依赖: compile 'io.reactivex.rxjava2:rxandroid:2.0.1' // Because RxAndroid releases are few and far between, it is recommended you also /

  • 对vue2.0中.vue文件页面跳转之.$router.push的用法详解

    vue2.0在使用的过程中, .vue文件之间的跳转,在template中的常见写法是: <router-link to="/miniCard/statement/horizon"> <button class="btn btn-default colorDe">继续</button> </router-link> 但是有时的需求是页面不直接跳转,有确认弹框或者其他事件,此时就需要在js中设置跳转,常用的一种方法是 .

  • sun unsafe类功能及使用注意事项详解

    目录 Unsafe简介 获取Unsafe实例 Unsafe功能列表 Unsafe的数组操作 base offset含义 index scale含义 array copy to direct memory copyMemory(Object srcBase, long srcOffset, Object destBase, long destOffset, long bytes) Benchmark 什么时候用Unsafe Unsafe简介 Unsafe是位于sun.misc包下的一个类,主要提供

  • Android  两个Fragment之间的跳转和数据的传递实例详解

    Android  两个Fragment之间的跳转和数据的传递实例详解 作为一个Android的菜鸟,前些天在做项目的时候用到了fragment,需求是从一个Fragment跳转到另一个Fragment,并且还要传递数据,就像Activity的跳转一样.在网上找了好久都没找到很好的列子,最后通过看别人的博客和查文档终于做好了,现在整理一下,希望能帮助有需要的童鞋. 1.首先在第一个Fragment 里面拿到FragmentManger 和FragmentTransaction 代码如下. @Ove

  • Qt实现小功能之复杂抽屉效果详解

    目录 功能讲解 自定义标题widget 标题名称控件的创建 QCheckBox控件的创建 自定义内容Widget 创建显示高度描述控件 QScrollArea中widget实现 QScrollArea子窗口的提升 在Qt自带的控件中,也存在抽屉控件:QToolBar.但是,该控件有个缺点:一次只能展开一个抽屉信息,无法实现多个展开.为此,实现了如下效果的程序: 下面对这种实现效果进行讲解~ 功能讲解 开发环境:VS2017 + Qt5.14.2 64位 实现的核心技术: 1:QScrollAre

随机推荐