在Unity编辑器中,如果想要快捷的获取到Project面板中选中文件的路径,比如我们需要用Resources.Load的方式加载一个prefab,就需要知道这个prefab的路径,或者在自定义窗口中需要显示出所选择文件的路径,那么接下来的方法就能排上用场了。
代码:
public static void LogPath()
{
//支持多选
string[] guids = Selection.assetGUIDs;//获取当前选中的asset的GUID
for (int i = 0; i < guids.Length; i++)
{
string assetPath = AssetDatabase.GUIDToAssetPath(guids[i]);//通过GUID获取路径
Debug.Log(assetPath);
}
}
注意,这里采用的是Editor下面相关API,所以此代码脚本必须要放在Editor目录下。接下来简单聊聊对Project面板中asset选中后右键菜单的自定义。比如这样:
如果我们想要通过菜单的方式调用刚刚我们写的LogPath方法,只需要在方法体前面加上标签:
[MenuItem("Assets/LogPath")]
public static void LogPath(){}
这里的MenuItem有三个重载函数,简单介绍一下它的三个参数.
public MenuItem(string itemName, bool isValidateFunction, int priority);
itemName:这里的菜单上看到的名字
isValidateFunction:表名这个标签下的方法是不是验证此标签是否激活的表现(稍后看实例)
priority:优先级,控制在面板上的显示位置
对于isValidateFunction的作用,比如想要自定义的选项变灰(不可点击),如下:
那么就需要加上这样的处理:
[MenuItem("Assets/LogPath", true)]
public static bool ValidateLogPath()
{
return false;//返回true则为正常可点击状态 false代表变灰不可点击状态
}
好了,如果点击我们自定义的菜单,则可以看到选中asset的路径了:
其实仔细观察的话会发现,Unity已经提供了我们获取asset路径的方式,还有快捷键操作,就是这个Copy Path
所以前面写的通过代码来获取路径有点脱了裤子放屁的感觉,不过作为一名码农,通过自己动手写代码的方式来做这种脱了裤子放屁的事也会觉得屁真香。O(∩_∩)O哈哈~