Unity 編輯器中獲取選中的資料夾、檔案路徑

畅知發表於2024-06-21

編輯器中獲取選中的資料夾、檔案路徑

using UnityEditor;
using UnityEngine;
using Object = UnityEngine.Object;

public class MyEditorScript
{
    [MenuItem("Assets/PrintSelectedFolderPath")]
    static void PrintSelectedFolderPath()
    {
        // 第一種方式
        // 只能訪問選中的檔案 選中的資料夾則不會列印 
        // 獲取選中的物件 僅僅對File有效
        var obj = Selection.activeObject;
        // 獲取選中物件的路徑
        string path = AssetDatabase.GetAssetPath(obj);
        Debug.Log("透過Selection.activeObject獲取的路徑: " + path);

        // -----------------第二種方式-------------------------------
        //支援多選
        string[] guids = Selection.assetGUIDs;//獲取當前選中的asset的GUID
        for (int i = 0; i < guids.Length; i++)
        {
            string assetPath = AssetDatabase.GUIDToAssetPath(guids[i]);//透過GUID獲取路徑
            Debug.Log("透過GUID獲取的路徑"+Application.dataPath + assetPath.Substring(6));
        }

        //第三種方式訪問路徑
        Debug.Log("遍歷Object來獲取對應的路徑" + Application.dataPath + GetCurrentAssetDirectory().Substring(6));
    }

    public static string GetCurrentAssetDirectory()
    {
        foreach (var obj in Selection.GetFiltered<Object>(SelectionMode.Assets))
        {
            var path = AssetDatabase.GetAssetPath(obj);

            if(string.IsNullOrEmpty(path))
                continue;
            if (System.IO.Directory.Exists(path))
            {
                return path;
            }else if (System.IO.File.Exists(path))
            {
                return System.IO.Path.GetDirectoryName(path);
            }
        }
        return "";
    }

}

使用案例:

訪問某個具體的檔案:

image

三種方式都可以訪問出路徑:

image

訪問某個具體的資料夾:

image

則第一種方式Selection.activeObject便不可行[筆者在這裡踩坑~]

同樣的,如果訪問的資料夾內容為空,則三種方式均可列印出路徑:

image

image


相關文章