Unity导出工作台(Console)数据

2023-05-16

首先在Unity中添加C#脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System;
using System.Reflection;
using System.IO;

public class Print : EditorWindow
{
    static Type _LogEntriesType;
    static Type _logEntryType;

    static MethodInfo _GetCountMethod;
    static MethodInfo _StartGettingEntriesMethod;
    static MethodInfo _GetEntryInternalMethod;
    static MethodInfo _EndGettingEntriesMethod;

    static FieldInfo _conditionField;

    static bool _isSupport = false;

    bool _detail = false;

    [MenuItem("Debug/Export Console")]
    static void ShowEditor()
    {
        Print editor = EditorWindow.GetWindowWithRect<Print>(new Rect(-1, -1, 170, 60), true, "Export Console", true);
        editor.Show();
    }

    [MenuItem("Debug/Export Console", validate = true)]
    static bool ExportConsoleMenuValidate()
    {
        return _isSupport && GetEntryCount() > 0;
    }

    private void OnGUI()
    {
        _detail = EditorGUILayout.Toggle("Detail", _detail);
        GUILayout.FlexibleSpace();
        if (GUILayout.Button("Export"))
        {
            if (DoExportConsole(_detail))
            {
                Close();
            }
        }
        GUILayout.Space(5);
    }


    static bool DoExportConsole(bool detail)
    {
        string[] logs = GetConsoleEntries();
        string path = EditorUtility.SaveFilePanel("Export Console", Application.dataPath, "ConsoleLog", "txt");
        if (string.IsNullOrEmpty(path))
        {
            return false;
        }

        if (!detail)
        {
            for (int i = 0; i < logs.Length; ++i)
            {
                using (var sr = new StringReader(logs[i]))
                {
                    logs[i] = sr.ReadLine();
                }
            }
        }
        File.WriteAllLines(path, logs);
        EditorUtility.OpenWithDefaultApp(path);
        return true;
    }

    static Print()
    {
        _LogEntriesType = Type.GetType("UnityEditor.LogEntries,UnityEditor");
        if (_LogEntriesType != null)
        {
            _GetCountMethod = _LogEntriesType.GetMethod("GetCount", BindingFlags.Static | BindingFlags.Public);
            _StartGettingEntriesMethod = _LogEntriesType.GetMethod("StartGettingEntries", BindingFlags.Static | BindingFlags.Public);
            _GetEntryInternalMethod = _LogEntriesType.GetMethod("GetEntryInternal", BindingFlags.Static | BindingFlags.Public);
            _EndGettingEntriesMethod = _LogEntriesType.GetMethod("EndGettingEntries", BindingFlags.Static | BindingFlags.Public);
        }

        _logEntryType = Type.GetType("UnityEditor.LogEntry,UnityEditor");
        if (_logEntryType != null)
        {
            _conditionField = _logEntryType.GetField("message", BindingFlags.Public | BindingFlags.Instance);
        }
        CheckSupport();
    }

    static void CheckSupport()
    {
        if (_LogEntriesType == null ||
            _logEntryType == null ||
            _GetCountMethod == null ||
            _StartGettingEntriesMethod == null ||
            _GetEntryInternalMethod == null ||
            _EndGettingEntriesMethod == null ||
            _conditionField == null)
        {
            _isSupport = false;
        }
        else
        {
            _isSupport = true;
        }
    }

    static string[] GetConsoleEntries()
    {
        if (!_isSupport)
        {
            return null;
        }
        List<string> entries = new List<string>();

        object countObj = _GetCountMethod.Invoke(null, null);

        _StartGettingEntriesMethod.Invoke(null, null);

        int count = int.Parse(countObj.ToString());
        for (int i = 0; i < count; ++i)
        {
            object logEntry = Activator.CreateInstance(_logEntryType);
            object result = _GetEntryInternalMethod.Invoke(null, new object[] { i, logEntry });
            if (bool.Parse(result.ToString()))
            {
                entries.Add(_conditionField.GetValue(logEntry).ToString());
            }
        }
        _EndGettingEntriesMethod.Invoke(null, null);
        return entries.ToArray();
    }

    static int GetEntryCount()
    {
        if (!_isSupport)
        {
            return 0;
        }
        object countObj = _GetCountMethod.Invoke(null, null);
        return int.Parse(countObj.ToString());
    }
}

运行程序

在菜单栏出现

点击 “Export Console”

出现该窗口 

勾选 “Detail”,然后点击 “Export”选项

选择保存位置 

生成的.txt文件中会有工作台的所有内容,如

如果不勾选  “Detail” ,生成的.txt文件中只有打印的内容,如

 导出为Excel文件,我目前没找到直接一些的方法

我的做法是:在不勾选“Detail”时导出的文件,直接复制进Excel中

然后根据需要进行筛选数据

我导出的是坐标,直接复制进Excel中,会自动根据逗号进行数据拆分

小编目前是在校生,还在学习阶段,各方面还有很多不足

如有其他更好的方法,欢迎指出

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity导出工作台(Console)数据 的相关文章

  • Yolov5 更改识别窗口大小

    启动yolov5时 xff0c 会因为像素太大导致占据整个桌面 xff0c 这样非常影响使用和操作 xff0c 我们可以通过opencv中的resize函数来修改识别窗口的像素大小 xff0c 这样操作就方便多了 原代码中 通过修改cv2
  • MCS-51系列单片机指令系统分类

    51系列单片机共有111条指令 xff0c 这些指令的集合称为指令系统 常用的分类为以下几种 xff1a 按位寻址方式 xff1a 1 寄存器寻址 2 直接寻址 3 寄存器间接寻址 4 立即寻址 5 变址寻址 6 相对寻址 7 位寻址 按功
  • ubuntu20.04安装ROS【详细】

    Ubuntu20 04安装ROS与Ubuntu18 04大差不差 xff0c 安装过程基本没出现问题 按以下教程操作即可 一 更换源 xff1a 1 备份源文件 sudo cp etc apt sources list etc apt so
  • Ubuntu 16.04设置开机自启动脚本

    1 创建脚本 sh文件 可以在 home user Documents scripts路径下建立名为auto run test sh的文件 xff1b auto run test sh里面写上具体要做的事 xff0c 例如我这里 xff1a
  • ubuntu 修改默认python版本

    1 查看当前默认版本和存放位置 2 安装python3 8 2 删除原软连接 xff0c 生成新版本软连接 python V 输出 xff1a Python 2 7 17 whereis python or which python 输入
  • C语言 strcat方法的使用方式

    strcat char str1 char str2 将字符串str2拼接到str1的尾部 对于新手来说 xff0c 使用这个方法只要将str1的内存大小给够了 xff0c 这个方法就没有问题 xff0c 当然这个方法在C程序看来是不安全的
  • STM32_串口中断接收数据_空闲中断

    STM32 串口中断接收数据 空闲中断 引言 xff1a 1 串口中断接收数据首先要保证完整性 xff08 设置串口中断优先级 xff09 2 串口中断接收数据要保证实时性 xff08 打开串口空闲中断 空闲时间是2个字节的时间 xff09
  • STM32调试方式JTAG&SWD的区别

    在学习STM32时 xff0c 我们经常会遇到JTAG和SWD的调试方法 xff0c 还涉及到Jlink Ulink Stlink等 xff0c JTAG和SWD是ARM板一种调试模式 后面三种都是实现这种模式的一种工具 xff0c 他们之
  • 大端序、小端序和MSB、LSB的区别和举例

    大端序 小端序和MSB LSB的区别和举例 1 字节序序 不同平台上数据存储方式 xff1a 大端字节序 小端字节序 字节序就是一个多字节数据的低位置 一般是低8位 放置在存储单元的高有效位 高地址 还是 低有效位 低地址 的概念 xff1
  • 将word文件中的文本转成字符串

    将word文件中的文本转成字符串 需要用到apache poi 下面的一些jar包 下面是pom文件 xff0c 因为我也是在网上找的 xff0c 所以可能有多余的jar包 xff1a lt dependency gt lt groupId
  • spring boot线程里bean注入失败

    在多线程处理问题时 xff0c 无法通过 64 Autowired注入bean xff0c 报空指针异常 xff0c 在线程中为了线程安全 xff0c 是防注入的 xff0c 如果要用到这个类 xff0c 只能从bean工厂里拿个实例 sp
  • python生成Excel

    import xlwt import random lonlat 61 wb 61 xlwt Workbook ws 61 wb add sheet point for i in range 1000 lon 61 random unifo
  • python爬虫商品信息,并生成Excel

    刚开始学习爬虫 xff0c 记录一下 我爬了一页的数据 xff0c 想要爬取多页的 xff0c 只需要遍历 xff0c 改变url中最后的数字 xff0c 44是一页显示的条数 xff0c 第二页就是2 44 xff0c 以此类推 url中
  • Qt中的类

    一 xff0e 信号与槽 1 QT元对象系统 QT元对象系统提供三件事情 xff1a 1 QObject类 2 Q OBJECT 宏 xff0c 声明在类私有段中 3 moc编译器 xff1a 为每个Qobject子类对象生成实现元对象特性
  • 解析HTTP请求报文(GET、POST)

    目的 xff1a 一个WEB服务器需要解析客户端 xff08 浏览器 xff09 发来的请求 xff0c 两种常见的请求方式是GET和POST GET的请求格式 xff1a GET请求没有请求体只有请求头GET请求的请求参数放在URL后加上
  • 数字电视的格式(BT.601 BT.709 BT.2020)和接口(BT.656 BT.1120 BT.2077)

    规格和格式接口特性 标清数字电视 xff08 SDTV xff09 BT 601BT 656 高清数字电视 xff08 HDTV xff09 BT 709BT 1120 超高清数字电视 xff08 UHDTV xff09 BT 2020BT
  • Linux下TCP协议客户端和服务器之间的通信

    tcp 传输控制协议 1 TCP 是 种可靠的传输服务 xff08 不会出现传输差错 丢失 重复等各种现象 xff09 2 是 向连接的服务 3 个 tcp 连接只有两个端点 xff0c 是 对 通信 4 是可靠传输 拥塞控制 流量控制 超
  • DSO/LDSO 等直接法相关资料整理

    直接法视觉里程计 SLAM的学习门槛较特征法高 xff0c 我将DSO LDSO 等直接法相关资料尽量按作者分类整理如下 xff0c 毕竟沿着一个人的思路学习跨度不会太大 xff1b 此外 xff0c 将一些涉及的其他知识也一并整理 xff
  • SLAM和里程计评估工具——evo使用方法全解

    前言 本帖的主要内容是整理evo的使用方法及各种命令 xff0c 不含安装步骤及过程 xff0c 还未安装的请移步其他博主 evo目前支持的公开数据集格式有 xff1a TUM KITTI EuRoC以及ROS bagfile 如果使用的数
  • 陀螺仪加速度计MPU6050程序与校准方法

    文章目录 前言一 陀螺仪与加速度计简介二 程序使用1 初始化2 读取数据 三 误差校准1 陀螺仪校准2 加速度计校准3 校准后的输出 四 源码获取 前言 本文将介绍陀螺仪和加速度计的使用程序和校准方法 xff0c STM32的程序代码可从文

随机推荐

  • 物联网网关有效解决供水管网监测方案难题

    一 系统概述 管网在线监测系统解决方案设计目的在于 xff1a 解决管道爆管问题 管网水质二次污染影响饮用水质量 管网漏损导致严重的资源浪费等 xff0c 及时发现管网故障 xff0c 提高维护效率 降低损失 xff0c 保障输水 供水质量
  • 基于环保数采仪的有毒性气体监控系统

    在我们的日常生活中 如使用天然气 液化气的厨房 和工业环境中有发生有毒气体泄露的情况 xff0c 同时在工业的生产部门中存在将有毒气体直接排放进空中的情况 xff0c 不仅直接影响作业者的安全与健康 xff0c 而且污染周边的环境 因此 x
  • 智慧路灯远程智能控制

    智慧路灯远程智能控制在智慧城市建设中意义重大 传统配电柜灯控只能实现路灯群简单的定时开关 xff0c 且需要人力巡查故障 xff0c 无法对单灯进行控制 xff0c 效率低且电力浪费 5G智慧路灯杆 xff0c 43 路灯云平台 xff0c
  • 污水站监测解决方案

    污水站对不达标废水通过各种物理法 化学法和生物法进行强化加工处理 xff0c 以排入水体或城市管道旨在减少对环境的污染循环再利用 xff0c 以达到理想的环境效益 经济效益和社会效益 污水处理不当而排除 xff0c 严重破坏城市谁环境 生态
  • 5G智慧路灯杆 赋能物联网智慧城市

    计讯物联5G智慧路灯杆的高集成度逐步成为物联网时代新型智慧城市建设中市政 交通 安防 环境等信息化接入口 多功能智慧灯杆集智能灯控 视频监控 wifi覆盖 新能源充电桩 安防报警 环境监测 交通管制 led屏 音视频广播等多功能于一体 xf
  • I2C接口及时序

    1 I2C学习要点 1 有2条双向串行线 xff0c 一条数据线SDA xff0c 一条时钟线SCL 如果只做master SCL可以只是输出 SDA在PAD上一定是inout pin xff0c 当然转为数字信号时可以分为两组 inout
  • 智慧水务RTU遥测终端机

    智慧水务RTU遥测终端机 xff0c 支持水文水资源行业规约 xff0c 实现水务项目目标数据采集与无线传输 xff0c 支持图像视频采集传输 xff0c 满足模拟量 开关量信号采集进行阀门开关等远程控制 xff0c 执行上位机命令 xff
  • 环保数采仪污水处理远程监测解决方案

    环保数采仪下污水处理远程监测解决方案 xff0c 实现污水处理 排放全过程远程监控与管理 xff0c 远程实时目标因子监测 工况监控 数据动态显示 异常报警 远程控制 报表制作 趋势分析等操作 xff0c 环保部门平台对接 xff0c 源头
  • 5G DTU终端

    5G DTU终端 5G DTU终端TD210 xff0c 支持三大运营商5G 网络 xff0c 并向下兼容4G 3G 网络制式 xff0c 组网更加便捷 xff0c 5GDTU终端可实现RS232 485 422串口数据转5G TCP IP
  • 多功能智慧杆网关_多功能杆智能网关

    计讯物联多功能智慧杆网关具备数据视频采集 组网 协议转换 控制等多功能 xff0c 连接智慧杆杆体设备传感入网 xff0c 进行前端与后端监控中心的数据交互 xff0c 实现智慧路灯杆远程智能照明控制 智慧安防 视频监控 一键报警 车流量监
  • 计讯物联水利RTU赋能智慧水务,用科技守护供水生命线

    水是城市生存和发展 群众安身立命的必备条件之一 xff0c 城市的发展以及社会经济活动都离不开水 因此 xff0c 随着信息化技术的迅猛发展 xff0c 水务数字化已成为必然趋势 计讯物联依托数字孪生可视化 物联网 大数据 三维地理信息系统
  • 计讯物联环保数采仪TS910在扬尘预警监测解决方案的应用

    方案背景 随着我国经济高速发展和城市化进程的加速 xff0c 城市建设工程规模不断扩大 xff0c 工程施工给居住区 学校 医院等周边环境带来了巨大的影响 xff0c 特别是扬尘污染带来的细颗粒物 xff0c 严重危害到人体健康和大气环境质
  • 喜讯丨计讯物联荣获厦门软件园党群服务中心篮球赛亚军

    蓄势待发迎 篮 上 xff0c 齐心协力谱新篇 12月17日 xff0c 厦门软件园党群服务中心篮球赛完美落幕 计讯物联一路过关斩将 xff0c 荣获厦门软件园党群服务中心篮球赛亚军 决胜雅马哈 xff0c 强势晋级半决赛 随着一声哨响 x
  • Ubuntu 命令行安装chrome

    1 1 下载 Google Chrome 使用Ctrl 43 Alt 43 T快捷键或者点击终端图标 xff0c 打开你的终端 使用wget来下载 Google Chrome deb 软件包 xff1a wget https dl goog
  • unity实现物体沿指定的平滑曲线移动(贝塞尔曲线拟合)

    先上原文链接 xff1a unity 实现物体沿指定的平滑曲线移动 xff08 通过贝塞尔曲线实现 xff09 以梦为马 不负韶华的博客 CSDN博客 unity 贝塞尔曲线移动 输入程序后 xff0c 首先设置Size的值 xff0c 即
  • A*Pathfind Project的使用

    本文主要是对该文章的改进 xff1a Unity学习笔记 易学易会的unity中A星寻路插件 A Pathfind Project的使用 秋瞑小雁客的博客 CSDN博客 unity 寻路插件 上述文章中的代码在运行过程中 xff0c 角色到
  • 如何在Ubuntu上安装Apache Http服务器

    有两种方法可以在Ubuntu上安装Apache Http服务器 xff1a 使用apt命令自动安装 配置和构建源代码 xff0c 然后手动安装 1 自动安装 1 使用 apt cache search 命令搜索Apache软件包 apt c
  • Ubuntu18.04安装ROS系统

    1 Ubuntu与ROS的版本对应 Ubuntu ROS1 016 04LTSKinetic LTS18 04LTSMelodic LTS20 04LTSNoetic LTS 2 安装 本文为Ubuntu18 04版本下的安装 2 1准备工
  • 从Unity导出Obj格式的地形(Terrian)

    1 在Unity中创建C 脚本 using UnityEngine using System Collections using UnityEditor using System IO using UnityEngine SceneMana
  • Unity导出工作台(Console)数据

    首先在Unity中添加C 脚本 xff1a using System Collections using System Collections Generic using UnityEngine using UnityEditor usin