公司實現說明,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();