编辑器中获取选中的文件夹、文件路径
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的GUIDfor (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便不可行[笔者在这里踩坑~]
同样的,如果访问的文件夹内容为空,则三种方式均可打印出路径: