Unity總結整理編輯器常用接口

整理一下在寫Unity編輯器時經常需要用到的接口。

目錄

一、Selection 獲得Project面板下選中的路徑信息

二、Directory 獲得路徑下的文件或文件夾信息

三、AssetDatabase 獲得資源相關信息

四、File 文件操作

五、EditorUtility、GUILayout編輯器佈局 默認垂直佈局

六、還比較常用的類

七、一些應用

 

一、Selection 獲得Project面板下選中的路徑信息

1.Selection.GetFiltered 過濾選中的文件

    常用方法Selection.GetFiltered<UnityEngine.Object>(SelectionMode.Assets),拿到選中的文件路徑,可以多選操作,得到Assets目錄下的路徑名。

2.Selection.selectionChanged 變換選中時的事件通知,在編輯器下監聽,可以在變化時才執行Repaint更新編輯器,減少OnGUI的壓力。

3.SelectionMode 選中過濾模式,這裏只列舉比較常用的

    Unfiltered --> 不過濾,返回所有文件

    TopLevel  --> 只返回頂層文件,頂層下的將會被過濾

    Assets      --> 返回選中的資源

    ExcludePrefab --> 排除預製件

4.注意

    在Project右側操作面板時纔會有效,拿到路徑信息後可以進行下一步的操作

5.Selection.objects 選中的物體

二、Directory 獲得路徑下的文件或文件夾信息

1.Directory.CreateDirectory 創建文件夾目錄

2.Directory.GetDirectories 獲得路徑下文件夾目錄

3.Directory.GetFiles 獲得路徑下的文件

4.searchPattern 匹配文件規則

    “*”所有文件

    “*.prefab”預製體文件等

5.SearchOption 搜索規則

    TopDirectoryOnly --> 只操作當前目錄下的

    AllDirectories --> 操作當前且所有子目錄下的

三、AssetDatabase 獲得資源相關信息

1.AssetDatabase.GetAssetPath 獲取資源路徑,傳入UnityEngine.Object

2.AssetDatabase.LoadAssetAtPath 通過路徑獲取資源

3.AssetDatabase.GetDependencies 獲取依賴

4.AssetDatabase.SaveAssets 保存修改

5.AssetDatabase.Refresh 刷新

6.AssetDatabase.ImportAsset 導入資源

四、File 文件操作

1.File.Copy(src, dst) 複製

2.File.Exists(path) 文件是否存在

3.File.ReadAllBytes(file) 讀取文件字節

4.File.WriteAllBytes(file) 寫入文件字節

五、EditorUtility、GUILayout編輯器佈局 默認垂直佈局

1.BeginHorizontal  --- --- --- --- --- EndHorizontal 水平佈局

2.BeginVertical 垂直佈局

   。。

   EndVertical

3.BeginScrollView -- EndScrollView 滑動

4.LabelField 文字 ObjectField物體 Slider滑動條 

5.Button 按鈕 TextFile文字

6.基本上都可以直接定義到佈局類中查看使用方法

六、還比較常用的類

1.PrefabUtility 預設操作

     PrefabUtility.InstantiatePrefab將預製體實例化

     PrefabUtility.SavePrefabAsset 將關聯的預製體保存

2.EditorUtility 編輯器工具類 提示框 進度條框等

EditorUtility.DisplayDialog("這裏是提示框", "DisplayDialog", "確定")
EditorUtility.DisplayDialog("這裏是提示框", "DisplayDialog", "確定")
EditorUtility.DisplayProgressBar("這裏是進度提示", "刷新提示信息", 0.5f)

七、一些應用

選中Text預製體複製,並輸出依賴。

    public static void TestAll()
    {
        var obj = Selection.objects;
        if (obj == null) return;
        string path = AssetDatabase.GetAssetPath(obj[0]);
        Debug.Log("選中資源的路徑" + path);
        GameObject obj2 = AssetDatabase.LoadAssetAtPath<GameObject>(path);
        Debug.Log("資源名字" + obj2.name);
        File.Copy(path, path.Replace(".prefab", "copy.prefab"));
        var paths = AssetDatabase.GetDependencies(path);
        Debug.Log("輸出依賴:");
        foreach(var p in paths)
        {
            Debug.Log(p);
        }
    }

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章