Unity 编辑器下获取文件夹下资源文件

公司实现说明,m_CulturalHeritageAssetListPath为绝对路径,通过编辑器接口EditorUtility.OpenFolderPanel()返回绝对路径,但是unity只能AssetDatabase类只能访问相对于Asset文件夹路径下的资源,所以kResRootName为字符串"Asset",通过字符串Substring方法可以获取相对于Asset下的子字符串,通过调用AssetDatabase.FindAssets()方法找到资源的GUID路径,再接着公共AssetDatabase.GUIDToAssetPath,获取资源的相对于Asset下的路径,再使用AssetDatabase.LoadAssetAtPath()方法去加载资源,具体代码如下:


var indexOf = m_CulturalHeritageAssetListPath.IndexOf(kResRootName, StringComparison.Ordinal);
if (indexOf != -1)
{
    var searchInFolders = m_CulturalHeritageAssetListPath.Substring(indexOf, m_CulturalHeritageAssetListPath.Length - indexOf);
    var allPath = AssetDatabase.FindAssets("t:ScriptableObject", new string[] {searchInFolders});
    for (var i = 0; i < allPath.Length; i++)
    {
        var assetPath = AssetDatabase.GUIDToAssetPath(allPath[i]);
        var scriptableObject = AssetDatabase.LoadAssetAtPath(assetPath, typeof(CulturalHeritageList)) as CulturalHeritageList;
        if (scriptableObject != null)
            asset.BSCulturalHeritageDataList.Add(scriptableObject);

    }
}

var path = m_BSListSavePath + "/" + m_BSAssetListName + kResSuffix;
var savePathIndexof = path.IndexOf(kResRootName, StringComparison.Ordinal);
var savePathSubstring = path.Substring(savePathIndexof, path.Length - savePathIndexof);

AssetDatabase.CreateAsset(asset, savePathSubstring);
AssetDatabase.SaveAssets();
Selection.activeObject = asset;
AssetDatabase.Refresh();

 

posted @ 2020-10-17 09:34  MiKiNuo  阅读(1849)  评论(0)    收藏  举报