update runtime code

新增方法YooAssets.SetCacheSystemSandboxPath()
pull/122/head
hevinci 2023-05-12 17:32:41 +08:00
parent e6397559ff
commit 37f0d1e5a1
15 changed files with 109 additions and 82 deletions

View File

@ -45,7 +45,7 @@ namespace YooAsset
{ {
// BundleFiles // BundleFiles
{ {
string rootPath = PersistentHelper.GetCachedBundleFileFolderPath(_packageName); string rootPath = PersistentTools.GetCachedBundleFileFolderPath(_packageName);
DirectoryInfo rootDirectory = new DirectoryInfo(rootPath); DirectoryInfo rootDirectory = new DirectoryInfo(rootPath);
if (rootDirectory.Exists) if (rootDirectory.Exists)
{ {
@ -56,7 +56,7 @@ namespace YooAsset
// RawFiles // RawFiles
{ {
string rootPath = PersistentHelper.GetCachedRawFileFolderPath(_packageName); string rootPath = PersistentTools.GetCachedRawFileFolderPath(_packageName);
DirectoryInfo rootDirectory = new DirectoryInfo(rootPath); DirectoryInfo rootDirectory = new DirectoryInfo(rootPath);
if (rootDirectory.Exists) if (rootDirectory.Exists)
{ {

View File

@ -3,14 +3,59 @@ using System.Collections.Generic;
namespace YooAsset namespace YooAsset
{ {
/// <summary> internal static class PersistentTools
/// 资源路径帮助类
/// </summary>
internal static class PathHelper
{ {
private const string CacheFolderName = "CacheFiles";
private const string CachedBundleFileFolder = "BundleFiles";
private const string CachedRawFileFolder = "RawFiles";
private const string ManifestFolderName = "ManifestFiles";
private const string AppFootPrintFileName = "ApplicationFootPrint.bytes";
private static string _buildinPath; private static string _buildinPath;
private static string _sandboxPath; private static string _sandboxPath;
/// <summary>
/// 重写沙盒跟路径
/// </summary>
public static void OverwriteSandboxPath(string sandboxPath)
{
_sandboxPath = sandboxPath;
}
/// <summary>
/// 获取沙盒文件夹路径
/// </summary>
public static string GetPersistentRootPath()
{
#if UNITY_EDITOR
// 注意:为了方便调试查看,编辑器下把存储目录放到项目里
if (string.IsNullOrEmpty(_sandboxPath))
{
string directory = Path.GetDirectoryName(UnityEngine.Application.dataPath);
string projectPath = GetRegularPath(directory);
_sandboxPath = StringUtility.Format("{0}/Sandbox", projectPath);
}
#elif UNITY_STANDALONE
if (string.IsNullOrEmpty(_sandboxPath))
{
_sandboxPath = StringUtility.Format("{0}/Sandbox", UnityEngine.Application.dataPath);
}
#else
if (string.IsNullOrEmpty(_sandboxPath))
{
_sandboxPath = StringUtility.Format("{0}/Sandbox", UnityEngine.Application.persistentDataPath);
}
#endif
return _sandboxPath;
}
private static string GetRegularPath(string path)
{
return path.Replace('\\', '/').Replace("\\", "/"); //替换为Linux路径格式
}
/// <summary> /// <summary>
/// 获取基于流文件夹的加载路径 /// 获取基于流文件夹的加载路径
/// </summary> /// </summary>
@ -32,33 +77,6 @@ namespace YooAsset
return StringUtility.Format("{0}/{1}", root, path); return StringUtility.Format("{0}/{1}", root, path);
} }
/// <summary>
/// 获取沙盒文件夹路径
/// </summary>
public static string GetPersistentRootPath()
{
#if UNITY_EDITOR
// 注意:为了方便调试查看,编辑器下把存储目录放到项目里
if (string.IsNullOrEmpty(_sandboxPath))
{
string directory = Path.GetDirectoryName(UnityEngine.Application.dataPath);
string projectPath = GetRegularPath(directory);
_sandboxPath = StringUtility.Format("{0}/Sandbox", projectPath);
}
return _sandboxPath;
#else
if (string.IsNullOrEmpty(_sandboxPath))
{
_sandboxPath = StringUtility.Format("{0}/Sandbox", UnityEngine.Application.persistentDataPath);
}
return _sandboxPath;
#endif
}
private static string GetRegularPath(string path)
{
return path.Replace('\\', '/').Replace("\\", "/"); //替换为Linux路径格式
}
/// <summary> /// <summary>
/// 获取WWW加载本地资源的路径 /// 获取WWW加载本地资源的路径
/// </summary> /// </summary>
@ -76,18 +94,6 @@ namespace YooAsset
return path; return path;
#endif #endif
} }
}
/// <summary>
/// 持久化目录帮助类
/// </summary>
internal static class PersistentHelper
{
private const string CacheFolderName = "CacheFiles";
private const string CachedBundleFileFolder = "BundleFiles";
private const string CachedRawFileFolder = "RawFiles";
private const string ManifestFolderName = "ManifestFiles";
private const string AppFootPrintFileName = "ApplicationFootPrint.bytes";
/// <summary> /// <summary>
@ -95,7 +101,7 @@ namespace YooAsset
/// </summary> /// </summary>
public static void DeleteSandbox() public static void DeleteSandbox()
{ {
string directoryPath = PathHelper.MakePersistentLoadPath(string.Empty); string directoryPath = MakePersistentLoadPath(string.Empty);
if (Directory.Exists(directoryPath)) if (Directory.Exists(directoryPath))
Directory.Delete(directoryPath, true); Directory.Delete(directoryPath, true);
} }
@ -105,7 +111,7 @@ namespace YooAsset
/// </summary> /// </summary>
public static void DeleteCacheFolder() public static void DeleteCacheFolder()
{ {
string root = PathHelper.MakePersistentLoadPath(CacheFolderName); string root = MakePersistentLoadPath(CacheFolderName);
if (Directory.Exists(root)) if (Directory.Exists(root))
Directory.Delete(root, true); Directory.Delete(root, true);
} }
@ -115,7 +121,7 @@ namespace YooAsset
/// </summary> /// </summary>
public static void DeleteManifestFolder() public static void DeleteManifestFolder()
{ {
string root = PathHelper.MakePersistentLoadPath(ManifestFolderName); string root = MakePersistentLoadPath(ManifestFolderName);
if (Directory.Exists(root)) if (Directory.Exists(root))
Directory.Delete(root, true); Directory.Delete(root, true);
} }
@ -129,7 +135,7 @@ namespace YooAsset
{ {
if (_cachedBundleFileFolder.TryGetValue(packageName, out string value) == false) if (_cachedBundleFileFolder.TryGetValue(packageName, out string value) == false)
{ {
string root = PathHelper.MakePersistentLoadPath(CacheFolderName); string root = MakePersistentLoadPath(CacheFolderName);
value = $"{root}/{packageName}/{CachedBundleFileFolder}"; value = $"{root}/{packageName}/{CachedBundleFileFolder}";
_cachedBundleFileFolder.Add(packageName, value); _cachedBundleFileFolder.Add(packageName, value);
} }
@ -144,7 +150,7 @@ namespace YooAsset
{ {
if (_cachedRawFileFolder.TryGetValue(packageName, out string value) == false) if (_cachedRawFileFolder.TryGetValue(packageName, out string value) == false)
{ {
string root = PathHelper.MakePersistentLoadPath(CacheFolderName); string root = MakePersistentLoadPath(CacheFolderName);
value = $"{root}/{packageName}/{CachedRawFileFolder}"; value = $"{root}/{packageName}/{CachedRawFileFolder}";
_cachedRawFileFolder.Add(packageName, value); _cachedRawFileFolder.Add(packageName, value);
} }
@ -156,7 +162,7 @@ namespace YooAsset
/// </summary> /// </summary>
public static string GetAppFootPrintFilePath() public static string GetAppFootPrintFilePath()
{ {
return PathHelper.MakePersistentLoadPath(AppFootPrintFileName); return MakePersistentLoadPath(AppFootPrintFileName);
} }
/// <summary> /// <summary>
@ -165,7 +171,7 @@ namespace YooAsset
public static string GetCacheManifestFilePath(string packageName, string packageVersion) public static string GetCacheManifestFilePath(string packageName, string packageVersion)
{ {
string fileName = YooAssetSettingsData.GetManifestBinaryFileName(packageName, packageVersion); string fileName = YooAssetSettingsData.GetManifestBinaryFileName(packageName, packageVersion);
return PathHelper.MakePersistentLoadPath($"{ManifestFolderName}/{fileName}"); return MakePersistentLoadPath($"{ManifestFolderName}/{fileName}");
} }
/// <summary> /// <summary>
@ -174,7 +180,7 @@ namespace YooAsset
public static string GetCachePackageHashFilePath(string packageName, string packageVersion) public static string GetCachePackageHashFilePath(string packageName, string packageVersion)
{ {
string fileName = YooAssetSettingsData.GetPackageHashFileName(packageName, packageVersion); string fileName = YooAssetSettingsData.GetPackageHashFileName(packageName, packageVersion);
return PathHelper.MakePersistentLoadPath($"{ManifestFolderName}/{fileName}"); return MakePersistentLoadPath($"{ManifestFolderName}/{fileName}");
} }
/// <summary> /// <summary>
@ -183,7 +189,7 @@ namespace YooAsset
public static string GetCachePackageVersionFilePath(string packageName) public static string GetCachePackageVersionFilePath(string packageName)
{ {
string fileName = YooAssetSettingsData.GetPackageVersionFileName(packageName); string fileName = YooAssetSettingsData.GetPackageVersionFileName(packageName);
return PathHelper.MakePersistentLoadPath($"{ManifestFolderName}/{fileName}"); return MakePersistentLoadPath($"{ManifestFolderName}/{fileName}");
} }
/// <summary> /// <summary>

View File

@ -193,7 +193,7 @@ namespace YooAsset
public static BundleInfo GetUnpackInfo(PackageBundle packageBundle) public static BundleInfo GetUnpackInfo(PackageBundle packageBundle)
{ {
// 注意:我们把流加载路径指定为远端下载地址 // 注意:我们把流加载路径指定为远端下载地址
string streamingPath = PathHelper.ConvertToWWWPath(packageBundle.StreamingFilePath); string streamingPath = PersistentTools.ConvertToWWWPath(packageBundle.StreamingFilePath);
BundleInfo bundleInfo = new BundleInfo(packageBundle, BundleInfo.ELoadMode.LoadFromStreaming, streamingPath, streamingPath); BundleInfo bundleInfo = new BundleInfo(packageBundle, BundleInfo.ELoadMode.LoadFromStreaming, streamingPath, streamingPath);
return bundleInfo; return bundleInfo;
} }

View File

@ -222,7 +222,7 @@ namespace YooAsset
// 如果水印发生变化,则说明覆盖安装后首次打开游戏 // 如果水印发生变化,则说明覆盖安装后首次打开游戏
if (appFootPrint.IsDirty()) if (appFootPrint.IsDirty())
{ {
PersistentHelper.DeleteManifestFolder(); PersistentTools.DeleteManifestFolder();
appFootPrint.Coverage(); appFootPrint.Coverage();
YooLogger.Log("Delete manifest files when application foot print dirty !"); YooLogger.Log("Delete manifest files when application foot print dirty !");
} }
@ -376,7 +376,7 @@ namespace YooAsset
/// </summary> /// </summary>
public void Load() public void Load()
{ {
string footPrintFilePath = PersistentHelper.GetAppFootPrintFilePath(); string footPrintFilePath = PersistentTools.GetAppFootPrintFilePath();
if (File.Exists(footPrintFilePath)) if (File.Exists(footPrintFilePath))
{ {
_footPrint = FileUtility.ReadAllText(footPrintFilePath); _footPrint = FileUtility.ReadAllText(footPrintFilePath);
@ -409,7 +409,7 @@ namespace YooAsset
#else #else
_footPrint = Application.buildGUID; _footPrint = Application.buildGUID;
#endif #endif
string footPrintFilePath = PersistentHelper.GetAppFootPrintFilePath(); string footPrintFilePath = PersistentTools.GetAppFootPrintFilePath();
FileUtility.CreateFile(footPrintFilePath, _footPrint); FileUtility.CreateFile(footPrintFilePath, _footPrint);
YooLogger.Log($"Save application foot print : {_footPrint}"); YooLogger.Log($"Save application foot print : {_footPrint}");
} }

View File

@ -41,7 +41,7 @@ namespace YooAsset
{ {
if (_downloader1 == null) if (_downloader1 == null)
{ {
string savePath = PersistentHelper.GetCachePackageHashFilePath(_packageName, _packageVersion); string savePath = PersistentTools.GetCachePackageHashFilePath(_packageName, _packageVersion);
string fileName = YooAssetSettingsData.GetPackageHashFileName(_packageName, _packageVersion); string fileName = YooAssetSettingsData.GetPackageHashFileName(_packageName, _packageVersion);
string webURL = GetDownloadRequestURL(fileName); string webURL = GetDownloadRequestURL(fileName);
YooLogger.Log($"Beginning to download package hash file : {webURL}"); YooLogger.Log($"Beginning to download package hash file : {webURL}");
@ -71,7 +71,7 @@ namespace YooAsset
{ {
if (_downloader2 == null) if (_downloader2 == null)
{ {
string savePath = PersistentHelper.GetCacheManifestFilePath(_packageName, _packageVersion); string savePath = PersistentTools.GetCacheManifestFilePath(_packageName, _packageVersion);
string fileName = YooAssetSettingsData.GetManifestBinaryFileName(_packageName, _packageVersion); string fileName = YooAssetSettingsData.GetManifestBinaryFileName(_packageName, _packageVersion);
string webURL = GetDownloadRequestURL(fileName); string webURL = GetDownloadRequestURL(fileName);
YooLogger.Log($"Beginning to download manifest file : {webURL}"); YooLogger.Log($"Beginning to download manifest file : {webURL}");

View File

@ -42,8 +42,8 @@ namespace YooAsset
if (_downloader == null) if (_downloader == null)
{ {
string fileName = YooAssetSettingsData.GetManifestBinaryFileName(_buildinPackageName, _buildinPackageVersion); string fileName = YooAssetSettingsData.GetManifestBinaryFileName(_buildinPackageName, _buildinPackageVersion);
string filePath = PathHelper.MakeStreamingLoadPath(fileName); string filePath = PersistentTools.MakeStreamingLoadPath(fileName);
string url = PathHelper.ConvertToWWWPath(filePath); string url = PersistentTools.ConvertToWWWPath(filePath);
_downloader = new UnityWebDataRequester(); _downloader = new UnityWebDataRequester();
_downloader.SendRequest(url); _downloader.SendRequest(url);
} }

View File

@ -67,7 +67,7 @@ namespace YooAsset
if (_steps == ESteps.VerifyFileHash) if (_steps == ESteps.VerifyFileHash)
{ {
_manifestFilePath = PersistentHelper.GetCacheManifestFilePath(_packageName, _packageVersion); _manifestFilePath = PersistentTools.GetCacheManifestFilePath(_packageName, _packageVersion);
if (File.Exists(_manifestFilePath) == false) if (File.Exists(_manifestFilePath) == false)
{ {
_steps = ESteps.Done; _steps = ESteps.Done;
@ -131,7 +131,7 @@ namespace YooAsset
File.Delete(_manifestFilePath); File.Delete(_manifestFilePath);
} }
string hashFilePath = PersistentHelper.GetCachePackageHashFilePath(_packageName, _packageVersion); string hashFilePath = PersistentTools.GetCachePackageHashFilePath(_packageName, _packageVersion);
if (File.Exists(hashFilePath)) if (File.Exists(hashFilePath))
{ {
File.Delete(hashFilePath); File.Delete(hashFilePath);

View File

@ -38,8 +38,8 @@ namespace YooAsset
if (_downloader == null) if (_downloader == null)
{ {
string fileName = YooAssetSettingsData.GetPackageVersionFileName(_packageName); string fileName = YooAssetSettingsData.GetPackageVersionFileName(_packageName);
string filePath = PathHelper.MakeStreamingLoadPath(fileName); string filePath = PersistentTools.MakeStreamingLoadPath(fileName);
string url = PathHelper.ConvertToWWWPath(filePath); string url = PersistentTools.ConvertToWWWPath(filePath);
_downloader = new UnityWebDataRequester(); _downloader = new UnityWebDataRequester();
_downloader.SendRequest(url); _downloader.SendRequest(url);
} }

View File

@ -37,7 +37,7 @@ namespace YooAsset
if (_steps == ESteps.LoadCachePackageHashFile) if (_steps == ESteps.LoadCachePackageHashFile)
{ {
string filePath = PersistentHelper.GetCachePackageHashFilePath(_packageName, _packageVersion); string filePath = PersistentTools.GetCachePackageHashFilePath(_packageName, _packageVersion);
if (File.Exists(filePath) == false) if (File.Exists(filePath) == false)
{ {
_steps = ESteps.Done; _steps = ESteps.Done;

View File

@ -35,7 +35,7 @@ namespace YooAsset
if (_steps == ESteps.LoadCachePackageVersionFile) if (_steps == ESteps.LoadCachePackageVersionFile)
{ {
string filePath = PersistentHelper.GetCachePackageVersionFilePath(_packageName); string filePath = PersistentTools.GetCachePackageVersionFilePath(_packageName);
if (File.Exists(filePath) == false) if (File.Exists(filePath) == false)
{ {
_steps = ESteps.Done; _steps = ESteps.Done;

View File

@ -35,10 +35,10 @@ namespace YooAsset
{ {
if (_downloader1 == null) if (_downloader1 == null)
{ {
string savePath = PersistentHelper.GetCachePackageHashFilePath(_buildinPackageName, _buildinPackageVersion); string savePath = PersistentTools.GetCachePackageHashFilePath(_buildinPackageName, _buildinPackageVersion);
string fileName = YooAssetSettingsData.GetPackageHashFileName(_buildinPackageName, _buildinPackageVersion); string fileName = YooAssetSettingsData.GetPackageHashFileName(_buildinPackageName, _buildinPackageVersion);
string filePath = PathHelper.MakeStreamingLoadPath(fileName); string filePath = PersistentTools.MakeStreamingLoadPath(fileName);
string url = PathHelper.ConvertToWWWPath(filePath); string url = PersistentTools.ConvertToWWWPath(filePath);
_downloader1 = new UnityWebFileRequester(); _downloader1 = new UnityWebFileRequester();
_downloader1.SendRequest(url, savePath); _downloader1.SendRequest(url, savePath);
} }
@ -64,10 +64,10 @@ namespace YooAsset
{ {
if (_downloader2 == null) if (_downloader2 == null)
{ {
string savePath = PersistentHelper.GetCacheManifestFilePath(_buildinPackageName, _buildinPackageVersion); string savePath = PersistentTools.GetCacheManifestFilePath(_buildinPackageName, _buildinPackageVersion);
string fileName = YooAssetSettingsData.GetManifestBinaryFileName(_buildinPackageName, _buildinPackageVersion); string fileName = YooAssetSettingsData.GetManifestBinaryFileName(_buildinPackageName, _buildinPackageVersion);
string filePath = PathHelper.MakeStreamingLoadPath(fileName); string filePath = PersistentTools.MakeStreamingLoadPath(fileName);
string url = PathHelper.ConvertToWWWPath(filePath); string url = PersistentTools.ConvertToWWWPath(filePath);
_downloader2 = new UnityWebFileRequester(); _downloader2 = new UnityWebFileRequester();
_downloader2.SendRequest(url, savePath); _downloader2.SendRequest(url, savePath);
} }

View File

@ -74,12 +74,12 @@ namespace YooAsset
string folderName = FileHash.Substring(0, 2); string folderName = FileHash.Substring(0, 2);
if (IsRawFile) if (IsRawFile)
{ {
string cacheRoot = PersistentHelper.GetCachedRawFileFolderPath(PackageName); string cacheRoot = PersistentTools.GetCachedRawFileFolderPath(PackageName);
_cachedDataFilePath = $"{cacheRoot}/{folderName}/{CacheGUID}/{YooAssetSettings.CacheBundleDataFileName}{_fileExtension}"; _cachedDataFilePath = $"{cacheRoot}/{folderName}/{CacheGUID}/{YooAssetSettings.CacheBundleDataFileName}{_fileExtension}";
} }
else else
{ {
string cacheRoot = PersistentHelper.GetCachedBundleFileFolderPath(PackageName); string cacheRoot = PersistentTools.GetCachedBundleFileFolderPath(PackageName);
_cachedDataFilePath = $"{cacheRoot}/{folderName}/{CacheGUID}/{YooAssetSettings.CacheBundleDataFileName}"; _cachedDataFilePath = $"{cacheRoot}/{folderName}/{CacheGUID}/{YooAssetSettings.CacheBundleDataFileName}";
} }
return _cachedDataFilePath; return _cachedDataFilePath;
@ -100,12 +100,12 @@ namespace YooAsset
string folderName = FileHash.Substring(0, 2); string folderName = FileHash.Substring(0, 2);
if (IsRawFile) if (IsRawFile)
{ {
string cacheRoot = PersistentHelper.GetCachedRawFileFolderPath(PackageName); string cacheRoot = PersistentTools.GetCachedRawFileFolderPath(PackageName);
_cachedInfoFilePath = $"{cacheRoot}/{folderName}/{CacheGUID}/{YooAssetSettings.CacheBundleInfoFileName}"; _cachedInfoFilePath = $"{cacheRoot}/{folderName}/{CacheGUID}/{YooAssetSettings.CacheBundleInfoFileName}";
} }
else else
{ {
string cacheRoot = PersistentHelper.GetCachedBundleFileFolderPath(PackageName); string cacheRoot = PersistentTools.GetCachedBundleFileFolderPath(PackageName);
_cachedInfoFilePath = $"{cacheRoot}/{folderName}/{CacheGUID}/{YooAssetSettings.CacheBundleInfoFileName}"; _cachedInfoFilePath = $"{cacheRoot}/{folderName}/{CacheGUID}/{YooAssetSettings.CacheBundleInfoFileName}";
} }
return _cachedInfoFilePath; return _cachedInfoFilePath;
@ -139,7 +139,7 @@ namespace YooAsset
if (string.IsNullOrEmpty(_streamingFilePath) == false) if (string.IsNullOrEmpty(_streamingFilePath) == false)
return _streamingFilePath; return _streamingFilePath;
_streamingFilePath = PathHelper.MakeStreamingLoadPath(FileName); _streamingFilePath = PersistentTools.MakeStreamingLoadPath(FileName);
return _streamingFilePath; return _streamingFilePath;
} }
} }

View File

@ -93,7 +93,7 @@ namespace YooAsset
public void FlushManifestVersionFile() public void FlushManifestVersionFile()
{ {
if (_activeManifest != null) if (_activeManifest != null)
PersistentHelper.SaveCachePackageVersionFile(_packageName, _activeManifest.PackageVersion); PersistentTools.SaveCachePackageVersionFile(_packageName, _activeManifest.PackageVersion);
} }
private bool IsBuildinPackageBundle(PackageBundle packageBundle) private bool IsBuildinPackageBundle(PackageBundle packageBundle)

View File

@ -234,6 +234,27 @@ namespace YooAsset
{ {
CacheSystem.InitVerifyLevel = verifyLevel; CacheSystem.InitVerifyLevel = verifyLevel;
} }
/// <summary>
/// 设置缓存系统参数,沙盒目录的存储路径
/// </summary>
public static void SetCacheSystemSandboxPath(string sandboxPath)
{
if (string.IsNullOrEmpty(sandboxPath))
{
YooLogger.Error($"Sandbox path is null or empty !");
return;
}
// 注意:需要确保没有任何资源系统起效之前才可以设置沙盒目录!
if (_packages.Count > 0)
{
YooLogger.Error($"Please call this method {nameof(SetCacheSystemSandboxPath)} before the package is created !");
return;
}
PersistentTools.OverwriteSandboxPath(sandboxPath);
}
#endregion #endregion
#region 沙盒相关 #region 沙盒相关
@ -250,7 +271,7 @@ namespace YooAsset
/// </summary> /// </summary>
public static string GetSandboxRoot() public static string GetSandboxRoot()
{ {
return PathHelper.GetPersistentRootPath(); return PersistentTools.GetPersistentRootPath();
} }
/// <summary> /// <summary>
@ -259,7 +280,7 @@ namespace YooAsset
public static void ClearSandbox() public static void ClearSandbox()
{ {
YooLogger.Warning("Clear sandbox folder files, Finally, restart the application !"); YooLogger.Warning("Clear sandbox folder files, Finally, restart the application !");
PersistentHelper.DeleteSandbox(); PersistentTools.DeleteSandbox();
} }
#endregion #endregion