Unity 编辑器中获取选中的文件夹、文件路径

unity · 浏览次数 : 0

小编点评

在Unity编辑器中,可以使用以下三种方法来获取选中的文件夹和文件路径: 1. 通过选中对象的路径获取(适用于单选情况) 首先,选中一个对象(如脚本或材质),然后使用 `AssetDatabase.GetAssetPath()` 方法获取该对象的路径。 ```csharp var obj = Selection.activeObject; string path = AssetDatabase.GetAssetPath(obj); Debug.Log("通过Selection.activeObject获取的路径: " + path); ``` 2. 通过选中资产的GUID获取(适用于多选情况) 使用 `Selection.assetGUIDs` 属性获取当前选中的资产的GUID,然后使用 `AssetDatabase.GUIDToAssetPath()` 方法根据GUID获取资产路径。 ```csharp string[] guids = Selection.assetGUIDs; for (int i = 0; i < guids.Length; i++) { string assetPath = AssetDatabase.GUIDToAssetPath(guids[i]); Debug.Log("通过GUID获取的路径: " + Application.dataPath + assetPath.Substring(6)); } ``` 3. 遍历选中对象来获取对应路径 使用 `Selection.GetFiltered(SelectionMode.Assets)` 方法获取当前选中的资产列表,然后遍历列表中的对象,使用 `AssetDatabase.GetAssetPath()` 方法获取每个对象的路径。 ```csharp foreach (var obj in Selection.GetFiltered(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` 即可获取到文件夹路径。若文件夹内容为空,则第一种方法同样可以打印出路径。

正文

编辑器中获取选中的文件夹、文件路径

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


与Unity 编辑器中获取选中的文件夹、文件路径相似的内容:

Unity 编辑器中获取选中的文件夹、文件路径

编辑器中获取选中的文件夹、文件路径 using UnityEditor; using UnityEngine; using Object = UnityEngine.Object; public class MyEditorScript { [MenuItem("Assets/PrintSelect

扩展实现Unity协程的完整栈跟踪

现如今Unity中的协程(Coroutine)方案已显得老旧,Unitask等异步方案可以直接解决如异常捕获等各类问题, 并且Unity官方也在开发一套异步方案,但现阶段还是需要在协程这个方案上继续琢磨。 Unity协程中无法输出完整的栈跟踪,因为协程编译后会转换为IL编码的状态机,中间存在栈回到堆

Unity热更学习toLua使用--[1]toLua的导入和默认加载执行lua脚本

[0]toLua的导入 下载toLua资源包,访问GitHub项目地址,点击下载即可。 将文件导入工程目录中: 导入成功之后会出现Lua菜单栏,如未成功生成文件,可以点击Generate All 重新生成(注意很可能是路径问题导致的生成失败!) 之后就可以开始编写脚本执行第一个lua程序了! [1]

Unity框架与.NET, Mono框架的关系

什么是C# C#是一种面向对象的编程语言。 什么是.NET .NET是一个开发框架,它遵循并采用CIL(Common Intermediate Language)和CLR(Common Language Runtime)两种约定, CIL标准为一种编译标准:将不同编程语言(C#, JS, VB等)使

Unity三维数学总结

三维向量和三角函数 三维向量 向量是指一个同时具有大小和方向,且满足平行四边形法则的几何对象。 向量的模 po点相对于世界坐标原点的距离: po.magnitude。 标准向量,归一向量,指的是将向量的模变成1,方向不变。改变后的向量: po.normalized。 向量的方向 求向量的方向(求向量

Unity 利用Cache实现边下边玩

现在手机游戏的常规更新方案都是在启动时下载所有资源更新,游戏质量高的、用户粘性大的有底气,先安装2个G,启动再更新2个G,文件小了玩家还觉得品质不行不想玩。 最近在做微信、抖音小游戏,使用他们提供的资源缓存方案,现在要转成Android APP, 也想用这种边下边玩的机制把首包做小。 其实很简单,直

[Unity] 实现AssetBundle资源加载管理器

实现Unity AssetBundle资源加载管理器 AssetBundle是实现资源热更新的重要功能,但Unity为其提供的API却十分基(jian)础(lou)。像是自动加载依赖包、重复加载缓存、解决同步/异步加载冲突,等基础功能都必须由使用者自行实现。 因此,本篇博客将会介绍如何实现一个Ass

Unity开发Hololens2—环境配置

> 博客地址:https://www.cnblogs.com/zylyehuo/ * ![](https://img2023.cnblogs.com/blog/3071480/202304/3071480-20230405201857570-1161269618.png) > 配置如下: > win

Unity开发Hololens2—交互发布配置

> 博客地址:https://www.cnblogs.com/zylyehuo/ ## 环境配置 ```bash unity2021.3.15f visual studio 2019 pro MRTK 2.8.3 OpenXR 1.8.0 Hololens2 ``` > Hololens2 环境配置

Unity框架中的核心类

组件:Component 在Unity中,所有的游戏对象都可以挂载组件。组件控制着游戏对象的行为和外观,例如渲染、动画、碰撞检测等。 而Component就是组件的基类,提供了一些通用的方法和属性,例如gameObject、transform等。 Component类提供了许多方便的方法和属性,可以