Unity 获取文件夹引用并读取文件夹路径

准备

  1. 编辑器中的文件夹属于DefaultAssets类型的资源
  2. EditorGUILayout.ObjectField 可以获取对象的引用
  3. AssetDatabase.GetAssetPath可通过对象的实例id获取资源路径
  4. DirectoryInfo 可获取目录内文件信息
  5. Path.GetFileNameWithoutExtension 可获取无后缀的文件名

示例1

弹出窗口 选择文件夹 打印文件夹内文件名

using UnityEditor;
using System.IO;
using System.Linq;
public class FolderInFileName
{
    DefaultAsset folder;
    string folderPath;
    string[] result;
    int length;
    public void OnGUI()
    {
        folder = EditorGUILayout.ObjectField("选择文件夹", folder, typeof(DefaultAsset), false) as DefaultAsset;
        if (folder != null)
        {
            folderPath = AssetDatabase.GetAssetPath(folder.GetInstanceID());

            DirectoryInfo info = new DirectoryInfo(folderPath);

            var files = info.GetFiles("*", SearchOption.AllDirectories).
                Where(value => { return !value.FullName.EndsWith(".meta"); }).ToArray();

            if (files != null)
            {
                length = files.Length;
                result = new string[length];
                for (int i = 0; i < length; i++)
                    result[i] = Path.GetFileNameWithoutExtension(files[i].Name);
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("文件夹路径", folderPath);
                EditorGUILayout.LabelField("文件数量", length.ToString());
                for (int i = 0; i < length; i++)
                    EditorGUILayout.LabelField($"文件 {i + 1}", result[i]);
            }
        }
        else      
            EditorGUILayout.HelpBox("没有设置文件夹或文件后缀", MessageType.Warning);     
    }
}

public class PrintFolderInFileName : EditorWindow
{
    FolderInFileName folderInFileNames = new FolderInFileName();

    [MenuItem("Customs/PrinFileNams")]
    private static void OpenWindow()
    {
        var window = GetWindow<PrintFolderInFileName>();
        window.Show();
    }

    private void OnGUI()
    {
        folderInFileNames.OnGUI();
    }
}

示例2

点击文件夹 Inspector窗口打印文件名

using UnityEngine;
using UnityEditor;
using System.IO;
using System.Linq;

[CustomEditor(typeof(DefaultAsset))]
public class ShowFolderInFile : Editor
{
    public override void OnInspectorGUI()
    {
        string path = AssetDatabase.GetAssetPath(target);
        GUI.enabled = true;

        if (Directory.Exists(path))
        {
            if (path != null)
            {
                DirectoryInfo info = new DirectoryInfo(path);
                var files = info.GetFiles("*", SearchOption.AllDirectories).Where(value =>
                { return !value.FullName.EndsWith(".meta"); }).ToArray();
                if (files != null)
                {
                    var length = files.Length;
                    var result = new string[length];
                    for (int i = 0; i < length; i++)
                        result[i] = Path.GetFileNameWithoutExtension(files[i].Name);
                    EditorGUILayout.Space();

                    EditorGUILayout.LabelField("文件夹路径", path);
                    for (int i = 0; i < length; i++)
                        EditorGUILayout.LabelField($"文件 {i + 1}", result[i]);
                }
            }
        }
    }
}

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值