點擊unity日誌響應事件,以後可以繼續擴展。
using System;
using System.IO;
using System.Reflection;
using UnityEditor;
public class LogEditor
{
private static LogEditor m_Instance;
public static LogEditor GetInstacne()
{
if (m_Instance == null)
{
m_Instance = new LogEditor();
}
return m_Instance;
}
private Type m_ConsoleWindowType = null;
private FieldInfo m_ActiveTextInfo;
private FieldInfo m_ConsoleWindowFileInfo;
private LogEditor()
{
m_ConsoleWindowType = Type.GetType("UnityEditor.ConsoleWindow,UnityEditor");
m_ActiveTextInfo = m_ConsoleWindowType.GetField("m_ActiveText", BindingFlags.Instance | BindingFlags.NonPublic);
m_ConsoleWindowFileInfo = m_ConsoleWindowType.GetField("ms_ConsoleWindow", BindingFlags.Static | BindingFlags.NonPublic);
}
[UnityEditor.Callbacks.OnOpenAssetAttribute(-1)]
private static bool OnOpenAsset(int instanceID, int line)
{
if (GetInstacne().OpenDirectory())
{
return true;
}
return false;
}
public bool OpenDirectory()
{
var windowInstance = m_ConsoleWindowFileInfo.GetValue(null);
var activeText = m_ActiveTextInfo.GetValue(windowInstance);
string content = activeText.ToString();
var line1 = content.Substring(0,content.IndexOf("\n")) ;
if(Directory.Exists(line1))
{
EditorUtility.RevealInFinder(line1);
return true;
}
return false;
}
}