編輯器中獲取選中的資料夾、檔案路徑
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 "";
}
}
使用案例:
訪問某個具體的檔案:
三種方式都可以訪問出路徑:
訪問某個具體的資料夾:
則第一種方式Selection.activeObject便不可行[筆者在這裡踩坑~]
同樣的,如果訪問的資料夾內容為空,則三種方式均可列印出路徑: