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();

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM