# 生成资源配置文件

作用:查找 Resource 目录中的文件(本文以预制件为例),在 StreamingAssets 文件夹中生成配置文件(指定配置文件的格式为:文件名 = 文件路径)

注意:代码文件需要放到 Editor 文件夹中

GenerateResourceConfig
using System.IO;
using UnityEditor;
/// <summary>
/// GenerateResourceConfig
/// </summary>
public class GenerateResourceConfig : Editor
{
    // 使用了 C# 特性,使这个方法的调用方式变成了点特定的按钮
    // 按钮的位置在左上角,在 Tools 中的 Resource 中的 Generate Resource Config File
    [MenuItem("Tools/Resource/Generate Resource Config File")]
    public static void Generate()
    {
        // 生成资源配置文件
        //1. 查找 Resource 目录下所有的预制件的路径
        //AssetDatabase 包含了只适用于在编译器中操作资源的相关功能
        // 第一个参数是过滤器(指定格式的字符串)
        // 例:"t:prefab"  筛选出 prefab 类型的文件(预制件的后缀是 .prefab)
        // 第二个参数是指定路径
        // 返回值是 Unity 中的资源 ID,称之为 GUID
        string filter = "t:prefab";
        string searchInFolders = "Assets/Resources";
        string[] resourceFile = AssetDatabase.FindAssets(filter, new string[] { searchInFolders });
        for (int i = 0; i < resourceFile.Length; i++)
        {
            //GUID 转换为资源路径
            resourceFile[i] = AssetDatabase.GUIDToAssetPath(resourceFile[i]);
            //2. 生成对应关系(名称 = 路径)
            string fileName = Path.GetFileNameWithoutExtension(resourceFile[i]);
            string filePath = resourceFile[i].Replace(searchInFolders + "/", string.Empty).Replace("." + filter.Split(':')[1], string.Empty);
            resourceFile[i] = fileName + '=' + filePath;
        }
        //3. 在 .txt 文件中写入
        // 为了兼容所有的平台,需要放到 StreamingAssets 中
        //StreamingAssets 是 Unity 的特殊目录之一,
        // 该目录下的文件不会被压缩,适合在移动端读取资源,可以在 PC 端写入,
        // 在运行时,这个文件夹是只读的
        File.WriteAllLines("Assets/StreamingAssets/ConfigFile.txt", resourceFile);
        // 刷新文件夹(Unity 不会实时刷新 StreamingAssets 中的文件,可以用代码手动刷新)
        //AssetDatabase 包含了只适用于在编辑器中操作资源的相关功能
        AssetDatabase.Refresh();
    }
}