# 生成资源配置文件
作用:查找 Resource 目录中的文件(本文以预制件为例),在 StreamingAssets 文件夹中生成配置文件(指定配置文件的格式为:文件名 = 文件路径)
注意:代码文件需要放到 Editor 文件夹中
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(); | |
} | |
} |