编辑器查找类,并打开:
public class EventGraphAction {
private static Dictionary<string, string> ClassFiles = null;
public static bool OpenInEditor(string className)
{
if (ClassFiles == null)
{
ClassFiles = new Dictionary<string, string>();
DirSearch("Assets/");
}
foreach (KeyValuePair<string, string> entry in ClassFiles)
{
if (entry.Key.Equals(className))
{
OpenClass(entry.Value);
return true;
}
}
return false;
}
public static void OpenClass(string classPath)
{
#if UNITY_EDITOR
string AssetPath = classPath.Substring(Application.dataPath.Length, classPath.Length - Application.dataPath.Length);
AssetPath = "Assets" + AssetPath;
string guid = AssetDatabase.AssetPathToGUID(AssetPath);
// AssetDatabase.OpenAsset()
// Check is Script Inspector 2 installed first...
// Should be in the same assembly as your CodeArchitectureHelper class (or any other C# Editor class)
var si2WindowType = System.Type.GetType("FGCodeWindow");
if (si2WindowType != null)
{
var openAssetInTab = si2WindowType.GetMethod("OpenAssetInTab", new System.Type[] { typeof(string), typeof(int) });
if (openAssetInTab != null)
{
openAssetInTab.Invoke(null, new object[] { guid, -1 });
return;
}
}
UnityEditorInternal.InternalEditorUtility.OpenFileAtLineExternal(classPath, 0);
#endif
}
private static void DirSearch(string sDir)
{
try
{
DirectoryInfo dir = new DirectoryInfo(sDir);
foreach (DirectoryInfo d in dir.GetDirectories())
{
foreach (FileInfo f in d.GetFiles())
{
if (f.Extension == ".cs")
{
string name = f.Name.Substring(0, f.Name.Length - 3);
ClassFiles.Add(name, f.FullName);
}
}
DirSearch(d.FullName);
}
}
catch (System.Exception excpt)
{
Debug.LogWarning(excpt.Message);
}
}
}