using System.IO; using System.Collections.Generic; namespace YooAsset { /// /// 资源路径帮助类 /// internal static class PathHelper { /// /// 获取规范化的路径 /// public static string GetRegularPath(string path) { return path.Replace('\\', '/').Replace("\\", "/"); //替换为Linux路径格式 } /// /// 获取文件所在的目录路径(Linux格式) /// public static string GetDirectory(string filePath) { string directory = Path.GetDirectoryName(filePath); return GetRegularPath(directory); } /// /// 获取基于流文件夹的加载路径 /// public static string MakeStreamingLoadPath(string path) { return StringUtility.Format("{0}/YooAssets/{1}", UnityEngine.Application.streamingAssetsPath, path); } /// /// 获取基于沙盒文件夹的加载路径 /// public static string MakePersistentLoadPath(string path) { string root = MakePersistentRootPath(); return StringUtility.Format("{0}/{1}", root, path); } /// /// 获取沙盒文件夹路径 /// public static string MakePersistentRootPath() { #if UNITY_EDITOR // 注意:为了方便调试查看,编辑器下把存储目录放到项目里 string projectPath = GetDirectory(UnityEngine.Application.dataPath); return StringUtility.Format("{0}/Sandbox", projectPath); #else return StringUtility.Format("{0}/Sandbox", UnityEngine.Application.persistentDataPath); #endif } /// /// 获取WWW加载本地资源的路径 /// public static string ConvertToWWWPath(string path) { #if UNITY_EDITOR return StringUtility.Format("file:///{0}", path); #elif UNITY_IPHONE return StringUtility.Format("file://{0}", path); #elif UNITY_ANDROID return path; #elif UNITY_STANDALONE return StringUtility.Format("file:///{0}", path); #elif UNITY_WEBGL return path; #endif } } /// /// 沙盒帮助类 /// internal static class SandboxHelper { private const string CacheFolderName = "CacheFiles"; /// /// 删除沙盒总目录 /// public static void DeleteSandbox() { string directoryPath = PathHelper.MakePersistentLoadPath(string.Empty); if (Directory.Exists(directoryPath)) Directory.Delete(directoryPath, true); } /// /// 删除沙盒内的缓存文件夹 /// public static void DeleteCacheFolder() { string directoryPath = GetCacheFolderPath(); if (Directory.Exists(directoryPath)) Directory.Delete(directoryPath, true); } /// /// 获取缓存文件夹路径 /// public static string GetCacheFolderPath() { return PathHelper.MakePersistentLoadPath(CacheFolderName); } } /// /// 补丁包帮助类 /// internal static class PatchHelper { /// /// 获取资源信息列表 /// public static AssetInfo[] GetAssetsInfoByTags(PatchManifest patchManifest, string[] tags) { List result = new List(100); foreach (var patchAsset in patchManifest.AssetList) { if(patchAsset.HasTag(tags)) { AssetInfo assetInfo = new AssetInfo(patchAsset); result.Add(assetInfo); } } return result.ToArray(); } /// /// 资源解压相关 /// public static List ConvertToUnpackList(List unpackList) { List result = new List(unpackList.Count); foreach (var patchBundle in unpackList) { var bundleInfo = ConvertToUnpackInfo(patchBundle); result.Add(bundleInfo); } return result; } public static BundleInfo ConvertToUnpackInfo(PatchBundle patchBundle) { // 注意:我们把流加载路径指定为远端下载地址 string streamingPath = PathHelper.ConvertToWWWPath(patchBundle.StreamingFilePath); BundleInfo bundleInfo = new BundleInfo(patchBundle, BundleInfo.ELoadMode.LoadFromStreaming, streamingPath, streamingPath); return bundleInfo; } } }