diff --git a/Docs/AssetBuilder.md b/Docs/AssetBuilder.md index 3883e5c..1843a3f 100644 --- a/Docs/AssetBuilder.md +++ b/Docs/AssetBuilder.md @@ -39,25 +39,25 @@ ````C# public class AssetEncrypter : IAssetEncrypter { - /// - /// 检测资源包是否需要加密 - /// - bool IAssetEncrypter.Check(string filePath) - { - // 对配置表相关的资源包进行加密 - return filePath.Contains("Assets/Config/"); - } + /// + /// 检测资源包是否需要加密 + /// + bool IAssetEncrypter.Check(string filePath) + { + // 对配置表相关的资源包进行加密 + return filePath.Contains("Assets/Config/"); + } - /// - /// 对数据进行加密,并返回加密后的数据 - /// - byte[] IAssetEncrypter.Encrypt(byte[] fileData) - { - int offset = 32; - var temper = new byte[fileData.Length + offset]; - Buffer.BlockCopy(fileData, 0, temper, offset, fileData.Length); - return temper; - } + /// + /// 对数据进行加密,并返回加密后的数据 + /// + byte[] IAssetEncrypter.Encrypt(byte[] fileData) + { + int offset = 32; + var temper = new byte[fileData.Length + offset]; + Buffer.BlockCopy(fileData, 0, temper, offset, fileData.Length); + return temper; + } } ```` @@ -82,52 +82,52 @@ public class AssetEncrypter : IAssetEncrypter ````c# private static void BuildInternal(BuildTarget buildTarget) { - Debug.Log($"开始构建 : {buildTarget}"); + Debug.Log($"开始构建 : {buildTarget}"); - // 打印命令行参数 - int buildVersion = GetBuildVersion(); - bool isForceBuild = IsForceBuild(); - Debug.Log($"资源版本 : {buildVersion}"); - Debug.Log($"强制重建 : {isForceBuild}"); + // 打印命令行参数 + int buildVersion = GetBuildVersion(); + bool isForceBuild = IsForceBuild(); + Debug.Log($"资源版本 : {buildVersion}"); + Debug.Log($"强制重建 : {isForceBuild}"); - // 构建参数 - string defaultOutputRoot = AssetBundleBuilderHelper.GetDefaultOutputRoot(); - AssetBundleBuilder.BuildParameters buildParameters = new AssetBundleBuilder.BuildParameters(); - buildParameters.IsVerifyBuildingResult = true; - buildParameters.OutputRoot = defaultOutputRoot; - buildParameters.BuildTarget = buildTarget; - buildParameters.BuildVersion = buildVersion; - buildParameters.CompressOption = ECompressOption.LZ4; - buildParameters.AppendFileExtension = false; - buildParameters.IsForceRebuild = isForceBuild; - buildParameters.BuildinTags = "buildin"; + // 构建参数 + string defaultOutputRoot = AssetBundleBuilderHelper.GetDefaultOutputRoot(); + AssetBundleBuilder.BuildParameters buildParameters = new AssetBundleBuilder.BuildParameters(); + buildParameters.IsVerifyBuildingResult = true; + buildParameters.OutputRoot = defaultOutputRoot; + buildParameters.BuildTarget = buildTarget; + buildParameters.BuildVersion = buildVersion; + buildParameters.CompressOption = ECompressOption.LZ4; + buildParameters.AppendFileExtension = false; + buildParameters.IsForceRebuild = isForceBuild; + buildParameters.BuildinTags = "buildin"; - // 执行构建 - AssetBundleBuilder builder = new AssetBundleBuilder(); - builder.Run(buildParameters); + // 执行构建 + AssetBundleBuilder builder = new AssetBundleBuilder(); + builder.Run(buildParameters); - // 构建完成 - Debug.Log("构建完成"); + // 构建完成 + Debug.Log("构建完成"); } // 从构建命令里获取参数 private static int GetBuildVersion() { - foreach (string arg in System.Environment.GetCommandLineArgs()) - { - if (arg.StartsWith("buildVersion")) - return int.Parse(arg.Split("="[0])[1]); - } - return -1; + foreach (string arg in System.Environment.GetCommandLineArgs()) + { + if (arg.StartsWith("buildVersion")) + return int.Parse(arg.Split("="[0])[1]); + } + return -1; } private static bool IsForceBuild() { - foreach (string arg in System.Environment.GetCommandLineArgs()) - { - if (arg.StartsWith("forceBuild")) - return arg.Split("="[0])[1] == "true" ? true : false; - } - return false; + foreach (string arg in System.Environment.GetCommandLineArgs()) + { + if (arg.StartsWith("forceBuild")) + return arg.Split("="[0])[1] == "true" ? true : false; + } + return false; } ```` diff --git a/Docs/AssetCollector.md b/Docs/AssetCollector.md index 3023a31..5e8411b 100644 --- a/Docs/AssetCollector.md +++ b/Docs/AssetCollector.md @@ -25,10 +25,10 @@ ````c# public class PackDirectory : IPackRule { - string IPackRule.GetAssetBundleLabel(string assetPath) - { - return Path.GetDirectoryName(assetPath); //"Assets/Config/test.txt" --> "Assets/Config" - } + string IPackRule.GetAssetBundleLabel(string assetPath) + { + return Path.GetDirectoryName(assetPath); //"Assets/Config/test.txt" --> "Assets/Config" + } } ```` @@ -46,10 +46,10 @@ public class PackDirectory : IPackRule ````c# public class CollectScene : IFilterRule { - public bool IsCollectAsset(string assetPath) - { - return Path.GetExtension(assetPath) == ".unity"; - } + public bool IsCollectAsset(string assetPath) + { + return Path.GetExtension(assetPath) == ".unity"; + } } ```` @@ -67,8 +67,8 @@ public class CollectScene : IFilterRule ````xml - - + + ```` diff --git a/Docs/YooAssetInit.md b/Docs/YooAssetInit.md index a1f4915..5898623 100644 --- a/Docs/YooAssetInit.md +++ b/Docs/YooAssetInit.md @@ -17,8 +17,8 @@ YooAssets.InitializeAsync(CreateParameters parameters); private IEnumerator InitializeYooAsset() { var createParameters = new YooAssets.EditorPlayModeParameters(); - createParameters.LocationRoot = "Assets/GameRes"; - yield return YooAssets.InitializeAsync(createParameters); + createParameters.LocationRoot = "Assets/GameRes"; + yield return YooAssets.InitializeAsync(createParameters); } ```` @@ -32,8 +32,8 @@ private IEnumerator InitializeYooAsset() private IEnumerator InitializeYooAsset() { var createParameters = new YooAssets.OfflinePlayModeParameters(); - createParameters.LocationRoot = "Assets/GameRes"; - yield return YooAssets.InitializeAsync(createParameters); + createParameters.LocationRoot = "Assets/GameRes"; + yield return YooAssets.InitializeAsync(createParameters); } ```` diff --git a/Docs/YooAssetLoader.md b/Docs/YooAssetLoader.md index fe45374..18aa901 100644 --- a/Docs/YooAssetLoader.md +++ b/Docs/YooAssetLoader.md @@ -26,38 +26,38 @@ YooAssets.LoadAssetAsync("Audio/bgMusic.mp3"); // 委托加载方式 void Start() { - AssetOperationHandle handle = YooAssets.LoadAssetAsync("Audio/bgMusic.mp3"); - handle.Completed += Handle_Completed; + AssetOperationHandle handle = YooAssets.LoadAssetAsync("Audio/bgMusic.mp3"); + handle.Completed += Handle_Completed; } void Handle_Completed(AssetOperationHandle handle) { - AudioClip audioClip = handle.AssetObject as AudioClip; + AudioClip audioClip = handle.AssetObject as AudioClip; } ```` ````C# // 协程加载方式 void Start() { - this.StartCoroutine(AsyncLoad()); + this.StartCoroutine(AsyncLoad()); } IEnumerator AsyncLoad() { - AssetOperationHandle handle = YooAssets.LoadAssetAsync("Audio/bgMusic.mp3"); - yield return handle; - AudioClip audioClip = handle.AssetObject as AudioClip; + AssetOperationHandle handle = YooAssets.LoadAssetAsync("Audio/bgMusic.mp3"); + yield return handle; + AudioClip audioClip = handle.AssetObject as AudioClip; } ```` ````C# // Task加载方式 async void Start() { - await AsyncLoad(); + await AsyncLoad(); } async Task AsyncLoad() { - AssetOperationHandle handle = YooAssets.LoadAssetAsync("Audio/bgMusic.mp3"); - await handle.Task; - AudioClip audioClip = handle.AssetObject as AudioClip; + AssetOperationHandle handle = YooAssets.LoadAssetAsync("Audio/bgMusic.mp3"); + await handle.Task; + AudioClip audioClip = handle.AssetObject as AudioClip; } ```` @@ -66,11 +66,11 @@ async Task AsyncLoad() ````C# void Start() { - AssetOperationHandle handle = YooAssets.LoadAssetAsync("Audio/bgMusic.mp3"); + AssetOperationHandle handle = YooAssets.LoadAssetAsync("Audio/bgMusic.mp3"); - ... + ... - handle.Release(); + handle.Release(); } ```` @@ -94,7 +94,7 @@ GameObject go = UnityEngine.Object.Instantiate(handle.AssetObject as GameObject) var handle = YooAssets.LoadSubAssetsSync(location); foreach (var asset in handle.AllAssets) { - Debug.Log($"Sprite name is {asset.name}"); + Debug.Log($"Sprite name is {asset.name}"); } ```` @@ -103,18 +103,18 @@ foreach (var asset in handle.AllAssets) ````c# void Start() { - // 场景加载参数 - SceneInstanceParam param = new SceneInstanceParam(); - param.LoadMode = UnityEngine.SceneManagement.LoadSceneMode.Single; - param.ActivateOnLoad = true; + // 场景加载参数 + SceneInstanceParam param = new SceneInstanceParam(); + param.LoadMode = UnityEngine.SceneManagement.LoadSceneMode.Single; + param.ActivateOnLoad = true; - AssetOperationHandle handle = YooAssets.LoadSceneAsync("Scene/Login", param); - handle.Completed += Handle_Completed; + AssetOperationHandle handle = YooAssets.LoadSceneAsync("Scene/Login", param); + handle.Completed += Handle_Completed; } void Handle_Completed(AssetOperationHandle handle) { - SceneInstance instance = handle.AssetInstance as SceneInstance; - Debug.Log(instance.Scene.name); + SceneInstance instance = handle.AssetInstance as SceneInstance; + Debug.Log(instance.Scene.name); } ```` diff --git a/Docs/YooAssetUpdater.md b/Docs/YooAssetUpdater.md index 594486f..39096ef 100644 --- a/Docs/YooAssetUpdater.md +++ b/Docs/YooAssetUpdater.md @@ -9,20 +9,20 @@ ````c# private IEnumerator UpdatePatchManifest() { - int updateResourceVersion = 123; - int timeout = 30; - UpdateManifestOperation operation = YooAssets.UpdateManifestAsync(updateResourceVersion, timeout); - yield return operation; + int updateResourceVersion = 123; + int timeout = 30; + UpdateManifestOperation operation = YooAssets.UpdateManifestAsync(updateResourceVersion, timeout); + yield return operation; - if (operation.Status == EOperationStatus.Succeed) - { - //更新成功 - } - else - { - //更新失败 - Debug.LogError(operation.Error); - } + if (operation.Status == EOperationStatus.Succeed) + { + //更新成功 + } + else + { + //更新失败 + Debug.LogError(operation.Error); + } } ```` @@ -40,20 +40,20 @@ private PatchDownloader _downloader; /// private void CreateDownloader() { - string[] tags = { "buildin", "config" }; - int downloadingMaxNum = 10; - int failedTryAgain = 3; - _downloader = YooAssets.CreateDLCDownloader(tags, 10, 3); - if (_downloader.TotalDownloadCount == 0) - { - //没有需要下载的资源 - } - else - { - //需要下载的文件总数和总大小 - int totalDownloadCount = _downloader.TotalDownloadCount; - long totalDownloadBytes = _downloader.TotalDownloadBytes; - } + string[] tags = { "buildin", "config" }; + int downloadingMaxNum = 10; + int failedTryAgain = 3; + _downloader = YooAssets.CreateDLCDownloader(tags, 10, 3); + if (_downloader.TotalDownloadCount == 0) + { + //没有需要下载的资源 + } + else + { + //需要下载的文件总数和总大小 + int totalDownloadCount = _downloader.TotalDownloadCount; + long totalDownloadBytes = _downloader.TotalDownloadBytes; + } } /// @@ -61,8 +61,8 @@ private void CreateDownloader() /// private void UpdateDownloader() { - if (_downloader != null) - _downloader.Update(); + if (_downloader != null) + _downloader.Update(); } /// @@ -70,22 +70,22 @@ private void UpdateDownloader() /// private IEnumerator Download() { - //注册下载回调 - _downloader.OnPatchFileDownloadFailedCallback = OnPatchFileDownloadFailed; - _downloader.OnDownloadProgressCallback = OnDownloadProgressUpdate; - _downloader.OnDownloadOverCallback = OnDownloadOver; - _downloader.Download(); - yield return _downloader; + //注册下载回调 + _downloader.OnPatchFileDownloadFailedCallback = OnPatchFileDownloadFailed; + _downloader.OnDownloadProgressCallback = OnDownloadProgressUpdate; + _downloader.OnDownloadOverCallback = OnDownloadOver; + _downloader.Download(); + yield return _downloader; - //检测下载结果 - if (_downloader.DownloadStates == EDownloaderStates.Succeed) - { - //下载成功 - } - else - { - //下载失败 - } + //检测下载结果 + if (_downloader.DownloadStates == EDownloaderStates.Succeed) + { + //下载成功 + } + else + { + //下载失败 + } } /// @@ -93,7 +93,7 @@ private IEnumerator Download() /// private void OnPatchFileDownloadFailed(string fileName) { - Debug.LogError($"File download failed : {fileName}"); + Debug.LogError($"File download failed : {fileName}"); } /// diff --git a/README.md b/README.md index 20e6c60..1c27664 100644 --- a/README.md +++ b/README.md @@ -2,33 +2,43 @@ YooAsset是一个基于Unity3D引擎的资源管理插件。 ## 特点 -**强大灵活的打包系统** -可以自定义打包策略,可以自定义冗余规则,自动分析依赖实现资源零冗余,基于资源对象的资源包依赖管理方案,避免了资源包之间循环依赖的问题。 +- **强大灵活的打包系统** -**安全高效的分包方案** -基于资源对象的标签分包方案,自动对依赖资源包进行分类,避免人工维护成本。可以非常方便的实现零资源安装包,或者全量资源安装包。 + 可以自定义打包策略,可以自定义冗余规则,自动分析依赖实现资源零冗余,基于资源对象的资源包依赖管理方案,避免了资源包之间循环依赖的问题。 -**灵活高效的加密方案** -提供多种加密策略,可以自定义加密规则,基于Unity官方的高效解密方案。 +- **安全高效的分包方案** -**基于引用计数方案** -基于引用技术的资源管理方案,可以帮助我们实现安全的资源卸载策略,更好的对内存管理,避免资源对象冗余。还有强大的分析器可帮助发现潜在的资源泄漏问题。 + 基于资源对象的标签分包方案,自动对依赖资源包进行分类,避免人工维护成本。可以非常方便的实现零资源安装包,或者全量资源安装包。 -**多种模式自由切换** -编辑器模拟模式,单机运行模式,联机运行模式。在编辑器模拟模式下,可以不构建资源包来模拟线上环境,在不修改任何代码的情况下,可以自由切换到其它模式。 +- **灵活高效的加密方案** -**强大安全的加载系统** + 提供多种加密策略,可以自定义加密规则,基于Unity官方的高效解密方案。 -- **异步加载和同步加载** 异步加载接口支持协程,Task,委托。支持异步加载和同步加载混合使用。 -- **边玩边下载** 在加载资源对象的时候,如果资源对象依赖的资源包在本地不存在,会自动从服务器下载到本地,然后再加载资源对象。 -- **多线程下载** 支持断点续传,自动验证下载文件,自动修复损坏文件。可以自定义下载失败重试次数,下载超时判定时间。 -- **多功能下载器** 可以按照资源标签列表创建下载器,也可以按照资源对象列表创建下载器。下载器可以设置同时下载文件数的限制,设置下载失败重试次数,多个下载器同时下载不用担心文件重复下载问题,下载器还提供了下载进度以及下载失败异常等常用接口。 +- **基于引用计数方案** -**原生格式文件管理** -无缝衔接资源打包系统,可以很方便的实现原生文件的版本管理和下载。 + 基于引用技术的资源管理方案,可以帮助我们实现安全的资源卸载策略,更好的对内存管理,避免资源对象冗余。还有强大的分析器可帮助发现潜在的资源泄漏问题。 -**灵活多变的版本管理** -支持线上版本快速回退,支持区分审核版本,测试版本,线上版本,支持灰度更新及测试。 +- **多种模式自由切换** + + 编辑器模拟模式,单机运行模式,联机运行模式。在编辑器模拟模式下,可以不构建资源包来模拟线上环境,在不修改任何代码的情况下,可以自由切换到其它模式。 + +- **强大安全的加载系统** + + - **异步加载和同步加载** 异步加载接口支持协程,Task,委托。支持异步加载和同步加载混合使用。 + + - **边玩边下载** 在加载资源对象的时候,如果资源对象依赖的资源包在本地不存在,会自动从服务器下载到本地,然后再加载资源对象。 + + - **多线程下载** 支持断点续传,自动验证下载文件,自动修复损坏文件。可以自定义下载失败重试次数,下载超时判定时间。 + + - **多功能下载器** 可以按照资源标签列表创建下载器,也可以按照资源对象列表创建下载器。下载器可以设置同时下载文件数的限制,设置下载失败重试次数,多个下载器同时下载不用担心文件重复下载问题,下载器还提供了下载进度以及下载失败异常等常用接口。 + +- **原生格式文件管理** + + 无缝衔接资源打包系统,可以很方便的实现原生文件的版本管理和下载。 + +- **灵活多变的版本管理** + + 支持线上版本快速回退,支持区分审核版本,测试版本,线上版本,支持灰度更新及测试。 ## 入门教程 1. [快速开始](https://github.com/tuyoogame/YooAsset/blob/master/Docs/QuickStart.md)