Unity导出工作台(Console)数据

这篇具有很好参考价值的文章主要介绍了Unity导出工作台(Console)数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先在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());
    }
}

运行程序

在菜单栏出现Unity导出工作台(Console)数据

点击 “Export Console”

出现该窗口Unity导出工作台(Console)数据 

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

选择保存位置Unity导出工作台(Console)数据 

生成的.txt文件中会有工作台的所有内容,如Unity导出工作台(Console)数据

如果不勾选  “Detail” ,生成的.txt文件中只有打印的内容,如Unity导出工作台(Console)数据

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

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

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

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

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

如有其他更好的方法,欢迎指出文章来源地址https://www.toymoban.com/news/detail-404298.html

到了这里,关于Unity导出工作台(Console)数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于VUE3+Layui从头搭建通用后台管理系统(前端篇)七:工作台界面实现

      本章实现工作台界面相关内容,包括echart框架引入,mock框架引入等,实现工作台界面框架搭建,数据加载。 1. 详细课程地址: https://edu.csdn.net/course/detail/38183 2. 源码下载地址: 点击下载 基于VUE3+Layui从头搭建通用后台管理系统合集-工作台界面布局实现 echart官网:https

    2024年02月14日
    浏览(63)
  • Sqoop导出hive/hdfs数据到mysql中---大数据之Apache Sqoop工作笔记006

    然后我们看看数据利用sqoop,从hdfs hbase中导出到mysql中去   看看命令可以看到上面这个   这里上面还是mysql的部分,然后看看 下面--num-mappers 这个是指定mapper数 然后下面这个export-dir这里是,指定hdfs中导出数据的目录 比如这里指定的是hive的一个表/user/hive/warehouse/sttaff_hive 然后下

    2024年02月03日
    浏览(43)
  • Unity中实现动画数据导出导入

    目录 数据导出: 数据导入 解析数据播放动画 根据曲线插值每帧计算数据,模拟Unity中动画播放系统,实现不通过动画控制器播放动画的功能,解决帧同步中动画结果无法预测问题,其实有可能涉及到对动画插值算法的模拟。 数据导出: 首先我们要大概梳理一下Unity中动画控

    2023年04月13日
    浏览(45)
  • Unity编辑器下Console面板查看完整打印日志

    最近在做客户端遇到这样一个问题,对于Console面板上的打印日志,每条打印的内容是有上限的,比如我有一个包含100个国王信息的消息打印日志 往下拖动   划到底也只是显示了63条国王信息。 在C:UsersxxxAppDataLocalUnityEditor   路径下找到Editor.log文件,然后就能看到编辑器

    2024年02月15日
    浏览(50)
  • eDiary-白日梦电子记事本基本使用说明【记事本导出和导入方法、本地数据迁移方法、记录工作日报、日历代办等】

    因为公司大佬分享资料,需要用到白日梦这个电子记事本,所以才了解到这个软件,体量小,功能高级,是个好软件。 官方地址:白日梦 导出与导入均不要使用文件-导出和导入,不好使。 右键需要导出的文档-高级-导出-文件 跟着提示下一步就行了 我这以导入文件夹资料为

    2024年02月03日
    浏览(125)
  • Unity的Console的控制类LogEntries:深入解析与实用案例

    在Unity开发过程中,我们经常需要使用Console窗口来查看程序运行时的日志信息。Unity内置的日志系统提供了基本的日志功能,但有时我们需要更多的自定义选项。本文将介绍如何使用Unity Console窗口的 LogEntries 私有类来实现自定义日志系统,并提供多个使用例子。 首先,我们需

    2024年02月06日
    浏览(28)
  • Unity入门系列之Inspector检查窗口和Console控制台窗口

    目录 1.基本内容 2.Inspector检查窗口 3.Console控制台窗口 Inspector检查窗口:查看场景中游戏对象关联的C#脚本信息。 Console控制台窗口:用于查看调试信息的窗口,报错警告,测试打印都可以显示在其中。 不选择场景中游戏对象或不进行任何相关设置,该界面不会显示任何信息。

    2024年02月05日
    浏览(41)
  • Unity2019打开并运行项目,Console上莫名出现两个红色感叹号问题、空白报错。

     解决办法:放弃使用UnityHub打开Unity.exe; 要么直接卸载UnityHub; 如果不想卸载UnityHub也可以。 1.首先从UnityHub剔除该2019版本的Unity; 2.然后再按照作者的启动方式,直接双击2019版的Unity.exe,即将弹出两种打开方式; (1)首先会自动弹出UnityHub,关闭即可; (2)其次会弹出一个叫做“

    2024年02月16日
    浏览(35)
  • Unity 2021版本,安卓打包时报错 Gradle build failed.See the console for details.

    Unity最后安卓打包时候,我打包失败,报错5个结果,参考很多博主方法后,已经解决了,故没有图。   解决方法:在排除了中文路径,Build System设置等问题后,我报这个错原因是安装的Android studio,Android studio在运行的时候也会在C盘生成一个.gradle文件,并且顶替了原有Unity打

    2024年02月11日
    浏览(49)
  • 【解决方案】找不到依赖 “@tarojs/plugin-framework-react“,请先在项目中安装

    导入微信小程序项目,执行yarn build:weapp 或者npm run build:weapp后报错如下: 👽 Taro v3.5.12 找不到依赖 \\\"@tarojs/plugin-framework-react\\\",请先在项目中安装 报错原因是Taro的版本号和其他插件版本号不匹配。 解决方法是终端执行以下代码,添加或更新插件。

    2024年02月12日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包