公司实现说明,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();