Unity自动生成资源配置文件

 效果说明:

1.通过在unity菜单面板上通过编辑器扩展,实现点击按钮更新资源配置文件

点击后生成名字为ResMap的文本文件(文件名字可以在代码中修改)

2.最终效果会生成一个资源路径配置文件,方便后续使用

 代码:

注意此脚本必须放在Editor文件夹下

using System.IO;
using UnityEditor;
using UnityEngine;

//生成资源配置文件的类
public class GenerateResConfig : Editor
{
    [MenuItem("Tools/Resources/Generate Config File")]
    public static void Generate()
    {
        string path = Path.Combine(Application.dataPath, "Resources").Replace(@"\", "/");
        string[] resFiles = Directory.GetFiles(path, "*.prefab", SearchOption.AllDirectories);
        for(int i=0;i<resFiles.Length;i++)
        {
            string key = Path.GetFileNameWithoutExtension(resFiles[i]);
            string value = resFiles[i].Replace(@"\", "/").Replace(path + "/", "").Replace(".prefab", "");
            resFiles[i] = key+"="+value;
        }
        File.WriteAllLines(Path.Combine(path,"ResMap.txt"), resFiles);
        AssetDatabase.Refresh();
    }
}

部分代码详解

特性MenuItem解释

[MenuItem("Tools/Resources/Generate Config File")]是一个用于在Unity编辑器中创建自定义菜单项的标记。

Path.Combine()

string path = Path.Combine(Application.dataPath, "Resources").Replace(@"\", "/");

在Unity中,Path.Combine()方法用于将多个路径片段组合成一个完整的路径。它接受任意数量的字符串参数,并根据操作系统的规则自动处理路径分隔符。

Path.Combine()方法的使用非常简单,你只需要将要组合的路径片段作为参数传递给它。例如:

string path1 = "Assets";
string path2 = "Scripts";
string fullPath = Path.Combine(path1, path2);

在上面的例子中,Path.Combine()方法将会将"path1"和"path2"组合成一个完整的路径。结果将根据操作系统的规则自动处理路径分隔符,确保生成的路径在不同操作系统上都是有效的。

Path.Combine()方法还可以接受更多的路径片段作为参数,例如:

string path1 = "Assets";
string path2 = "Scripts";
string path3 = "Utils";
string fullPath = Path.Combine(path1, path2, path3);

在这个例子中,Path.Combine()方法将会将"path1"、"path2"和"path3"组合成一个完整的路径。

总结一下,Path.Combine()方法是一个方便的工具,用于将多个路径片段组合成一个完整的路径,并确保生成的路径在不同操作系统上都是有效的。这在文件操作中经常使用,特别是在构建文件路径时非常有用。

Application.dataPath()

在Unity中,Application.dataPath是一个只读属性,用于获取项目的Assets文件夹的绝对路径。

具体来说,Application.dataPath返回一个字符串,表示项目的Assets文件夹的绝对路径。在大多数情况下,它指向项目文件夹的"Assets"子文件夹。

例如,如果你的Unity项目位于"C:\MyProject"文件夹中,那么Application.dataPath将返回"C:\MyProject\Assets"。

需要注意的是,Application.dataPath返回的是一个绝对路径,而不是相对于项目的相对路径。这意味着无论你将项目移动到哪个位置,Application.dataPath始终指向Assets文件夹的绝对路径。

Application.dataPath在许多场景中非常有用,特别是在需要读取或写入项目中的文件时。你可以使用它来构建文件的完整路径,或者在文件操作中指定文件的位置。

需要注意的是,由于Application.dataPath返回的是一个只读属性,你不能直接修改它。如果你需要在项目中创建、修改或删除文件,你应该使用其他方法,如File类或AssetDatabase类提供的方法。

Directory.GetFiles()

 string[] resFiles = Directory.GetFiles(path, "*.prefab", SearchOption.AllDirectories);

Directory.GetFiles()是一个用于获取指定目录中的文件路径的方法。它返回一个字符串数组,包含指定目录中所有文件的完整路径。

Directory.GetFiles()方法有多个重载形式,可以根据不同的参数来获取不同条件下的文件路径。以下是其中一个常用的重载形式的示例:

string[] filePaths = Directory.GetFiles(directoryPath);

在上面的示例中,directoryPath是一个字符串,表示要获取文件路径的目录的路径。Directory.GetFiles()将返回一个字符串数组,其中包含指定目录中所有文件的完整路径。

需要注意的是,Directory.GetFiles()默认只返回指定目录中的文件路径,不包括子目录中的文件。如果你需要获取子目录中的文件路径,可以使用另一个重载形式,并指定搜索选项为SearchOption.AllDirectories,例如:

string[] filePaths = Directory.GetFiles(directoryPath, "*", SearchOption.AllDirectories);

在这个示例中,"*"表示匹配所有文件,SearchOption.AllDirectories表示搜索包括子目录在内的所有目录。

Directory.GetFiles()方法还可以使用通配符来筛选文件路径。例如,你可以使用 "*.txt" 来获取指定目录中所有扩展名为txt的文件路径。

总结一下,Directory.GetFiles()是一个用于获取指定目录中文件路径的方法。它返回一个字符串数组,包含指定目录中所有文件的完整路径。你可以使用不同的参数来控制获取文件路径的条件,例如指定目录、搜索选项和通配符等。

Path.GetFileNameWithoutExtension()

Path.GetFileNameWithoutExtension()是一个用于获取文件名(不包括扩展名)的方法。它接受一个字符串参数,表示文件路径,并返回文件名(不包括扩展名)。

以下是Path.GetFileNameWithoutExtension()的示例用法:

string filePath = "C:/Folder/File.txt";
string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(filePath);

在上面的示例中,filePath是一个字符串,表示文件的完整路径。Path.GetFileNameWithoutExtension()将返回一个字符串,表示文件名(不包括扩展名)。在这个示例中,fileNameWithoutExtension将被赋值为"File"。

需要注意的是,Path.GetFileNameWithoutExtension()方法只返回文件名的部分,不包括路径和扩展名。如果文件路径中包含多级目录,该方法只返回最后一个目录中的文件名。

如果文件路径中没有扩展名,Path.GetFileNameWithoutExtension()将返回完整的文件名。

Path.GetFileNameWithoutExtension()方法对于从文件路径中提取文件名并进行处理非常有用。你可以使用它来获取文件名并进行进一步的操作,例如重命名文件或生成新的文件名。

总结一下,Path.GetFileNameWithoutExtension()是一个用于获取文件名(不包括扩展名)的方法。它接受一个字符串参数,表示文件路径,并返回文件名(不包括扩展名)。使用该方法可以方便地从文件路径中提取文件名并进行处理。

AssetDatabase.Refresh()

AssetDatabase.Refresh()是Unity中的一个静态方法,用于刷新AssetDatabase的状态,使其与磁盘上的文件同步。

在Unity中,AssetDatabase是一个用于管理项目中资源的工具类。它负责维护资源的导入、导出、移动、删除等操作,并提供了一些用于查询和操作资源的方法。

当你在Unity编辑器中对项目中的资源进行了一些操作(如添加、删除、移动文件等),这些操作可能不会立即反映在AssetDatabase中。这时,你可以调用AssetDatabase.Refresh()方法来强制刷新AssetDatabase,使其与磁盘上的文件同步。

调用AssetDatabase.Refresh()方法后,Unity将重新扫描项目文件夹,并更新AssetDatabase中的资源信息。这意味着新添加的文件将被导入,已删除的文件将被移除,已移动的文件将被更新等。

需要注意的是,AssetDatabase.Refresh()是一个比较耗时的操作,特别是在项目中包含大量资源的情况下。因此,建议在必要时才调用该方法,以避免不必要的性能开销。

另外,AssetDatabase.Refresh()方法通常在脚本中使用,以确保在进行资源操作后,AssetDatabase中的资源信息得到及时更新。例如,在脚本中添加或删除文件后,你可以调用AssetDatabase.Refresh()来确保新的文件在编辑器中可见。

总结一下,AssetDatabase.Refresh()是一个用于刷新AssetDatabase的状态,使其与磁盘上的文件同步的方法。调用该方法后,Unity将重新扫描项目文件夹,并更新AssetDatabase中的资源信息。它通常在脚本中使用,以确保在进行资源操作后,AssetDatabase中的资源信息得到及时更新。


注:本博客为学习笔记,内容仅供参考。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值