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