UnityEditor 打开对应类

来源:互联网 发布:淘宝中国制造怎么申请 编辑:程序博客网 时间:2024/06/08 03:59

编辑器查找类,并打开:

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);        }    }}
1 0