首页 > 解决方案 > 如何在 AssetDatabase.FindAssets() 中使用正则表达式?

问题描述

我尝试使用 AssetDatabase.FindAssets() 在特定文件中查找 scriptableObject,我正在寻找一个名为 Resource 的文件。我想在我的资产文件夹中分散的所有资源文件中获取每个可编写脚本的对象。

例如 :

资产/GameAssets/FolderA/Resource/AssetA.asset

Assets/GameAssets/FolderB/Resource/AssetB.asset

资产/GameAssets/FolderC/Resource/AssetC.asset

资产/GameAssets/FolderD/Resource/AssetD.asset

这是我使用的当前代码

AssetDatabase.FindAssets("t:ScriptableObject", new[] { "Assets/GameAssets" });

它会返回不需要的 scriptableObjects。然后我尝试添加正则表达式

AssetDatabase.FindAssets("t:ScriptableObject", new[] { "Assets/GameAssets/*/Resource/AssetD.asset" });

ofc 它失败了,我没有经验,需要帮助。

标签: c#regexunity3d

解决方案


我想你可以使用Directory.GetDirectorieslike

var resourceFolders = Directory.GetDirectories(Path.Combine(Application.assetPath,"Games sets"), "Resource", SearchOption.AllDirectories);

它递归地查找目录中调用ResourceAssets/GameAssets目录的所有路径。

然后做

var assets = new List<string>();
foreach(var folder in resourceFolders)
{
    assets.AdsRange(AssetDatabass.FindAssets("t:ScriptableObject", folder);
}

为了对这些Resource目录中的每一个进行单独的搜索。


推荐阅读