项目升级到v2020.3,原来的v2017.3的日志重定向不可用了。
v2017.3日志重定向参考地址:https://blog.csdn.net/suifcd/article/details/72553678
原因在于UnityEditor.LogEntry和UnityEditor.LogEntries的API有所改动。
直接移植会报空错误和Assert Failed。
对比原版,这里把condition字段改成了message来处理空错误,并使用了StartGettingEntries和EndGettingEntries来处理Assert Failed的问题。
代码仅供参考,直接移植可能不生效
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text.RegularExpressions;
using MiniJSON;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEngine;
/// <summary>
/// 日志重定向,双击调用Debugger而生成的日志,将其定位到正确的地方而不是Debugger.cs中
/// </summary>
public static class DebuggerRedirect
{
private const string LogCsName = "Debugger.cs";
private static object _logListView;
private static EditorWindow _consoleWindow;
private static MethodInfo _logEntriesGetEntry;
private static MethodInfo _logEntriesStartGettingEntries;
private static MethodInfo _logEntriesEndGettingEntries;
private static FieldInfo _logListViewCurrentRow;
private static FieldInfo _logEntryMessage;
private static object _logEntry;
private static int _openInstanceID;
private static int _openLine;
private static bool GetConsoleWindowListView()
{
if (_logListView != null) return true;
var unityEditorAssembly = Assembly.GetAssembly(typeof(EditorWindow));
var consoleWindowType = unityEditorAssembly.GetType("UnityEditor.ConsoleWindow");
var fieldInfo = consoleWindowType.GetField(
"ms_ConsoleWindow", BindingFlags