using System; using System.Diagnostics; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace YooAsset { public static partial class YooAssets { private static bool _isInitialize = false; private static GameObject _driver = null; private static readonly List _packages = new List(); /// /// 初始化资源系统 /// /// 自定义日志处理 public static void Initialize(ILogger logger = null) { if (_isInitialize) throw new Exception($"{nameof(YooAssets)} is initialized !"); if (_isInitialize == false) { YooLogger.Logger = logger; // 创建驱动器 _isInitialize = true; _driver = new UnityEngine.GameObject($"[{nameof(YooAssets)}]"); _driver.AddComponent(); UnityEngine.Object.DontDestroyOnLoad(_driver); YooLogger.Log($"{nameof(YooAssets)} initialize !"); #if DEBUG // 添加远程调试脚本 _driver.AddComponent(); #endif OperationSystem.Initialize(); DownloadSystem.Initialize(); } } /// /// 销毁资源系统 /// public static void Destroy() { if (_isInitialize) { OperationSystem.DestroyAll(); DownloadSystem.DestroyAll(); CacheSystem.ClearAll(); foreach (var package in _packages) { package.DestroyPackage(); } _packages.Clear(); _isInitialize = false; if (_driver != null) GameObject.Destroy(_driver); YooLogger.Log($"{nameof(YooAssets)} destroy all !"); } } /// /// 更新资源系统 /// internal static void Update() { if (_isInitialize) { OperationSystem.Update(); DownloadSystem.Update(); for (int i = 0; i < _packages.Count; i++) { _packages[i].UpdatePackage(); } } } /// /// 创建资源包 /// /// 资源包名称 public static ResourcePackage CreatePackage(string packageName) { if (_isInitialize == false) throw new Exception($"{nameof(YooAssets)} not initialize !"); if (string.IsNullOrEmpty(packageName)) throw new Exception("Package name is null or empty !"); if (HasPackage(packageName)) throw new Exception($"Package {packageName} already existed !"); ResourcePackage package = new ResourcePackage(packageName); _packages.Add(package); return package; } /// /// 获取资源包 /// /// 资源包名称 public static ResourcePackage GetPackage(string packageName) { var package = TryGetPackage(packageName); if (package == null) YooLogger.Error($"Not found assets package : {packageName}"); return package; } /// /// 尝试获取资源包 /// /// 资源包名称 public static ResourcePackage TryGetPackage(string packageName) { if (_isInitialize == false) throw new Exception($"{nameof(YooAssets)} not initialize !"); if (string.IsNullOrEmpty(packageName)) throw new Exception("Package name is null or empty !"); foreach (var package in _packages) { if (package.PackageName == packageName) return package; } return null; } /// /// 检测资源包是否存在 /// /// 资源包名称 public static bool HasPackage(string packageName) { if (_isInitialize == false) throw new Exception($"{nameof(YooAssets)} not initialize !"); foreach (var package in _packages) { if (package.PackageName == packageName) return true; } return false; } /// /// 开启一个异步操作 /// /// 异步操作对象 public static void StartOperation(GameAsyncOperation operation) { OperationSystem.StartOperation(operation); } #region 系统参数 /// /// 设置下载系统参数,启用断点续传功能文件的最小字节数 /// public static void SetDownloadSystemBreakpointResumeFileSize(int fileBytes) { DownloadSystem.BreakpointResumeFileSize = fileBytes; } /// /// 设置下载系统参数,下载失败后清理文件的HTTP错误码 /// public static void SetDownloadSystemClearFileResponseCode(List codes) { DownloadSystem.ClearFileResponseCodes = codes; } /// /// 设置下载系统参数,自定义的证书认证实例 /// public static void SetDownloadSystemCertificateHandler(UnityEngine.Networking.CertificateHandler instance) { DownloadSystem.CertificateHandlerInstance = instance; } /// /// 设置下载系统参数,自定义下载请求 /// public static void SetDownloadSystemUnityWebRequest(DownloadRequestDelegate requestDelegate) { DownloadSystem.RequestDelegate = requestDelegate; } /// /// 设置异步系统参数,每帧执行消耗的最大时间切片(单位:毫秒) /// public static void SetOperationSystemMaxTimeSlice(long milliseconds) { if (milliseconds < 10) { milliseconds = 10; YooLogger.Warning($"MaxTimeSlice minimum value is 10 milliseconds."); } OperationSystem.MaxTimeSlice = milliseconds; } /// /// 设置缓存系统参数,已经缓存文件的校验等级 /// public static void SetCacheSystemCachedFileVerifyLevel(EVerifyLevel verifyLevel) { CacheSystem.InitVerifyLevel = verifyLevel; } #endregion #region 沙盒相关 /// /// 获取内置文件夹名称 /// public static string GetStreamingAssetBuildinFolderName() { return YooAssetSettings.StreamingAssetsBuildinFolder; } /// /// 获取沙盒的根路径 /// public static string GetSandboxRoot() { return PathHelper.GetPersistentRootPath(); } /// /// 清空沙盒目录 /// public static void ClearSandbox() { PersistentHelper.DeleteSandbox(); } #endregion #region 调试信息 internal static DebugReport GetDebugReport() { DebugReport report = new DebugReport(); report.FrameCount = Time.frameCount; foreach (var package in _packages) { var packageData = package.GetDebugPackageData(); report.PackageDatas.Add(packageData); } return report; } #endregion } }