diff --git a/Docs/AssetBundleBuilder.md b/Docs/AssetBundleBuilder.md index 962ab1f..219d5a1 100644 --- a/Docs/AssetBundleBuilder.md +++ b/Docs/AssetBundleBuilder.md @@ -1,6 +1,6 @@ # 资源构建 -![image](./Image/AssetBuilder-img1.png) +![image](./Image/AssetBuilder-img1.jpg) ### 界面介绍 @@ -50,9 +50,7 @@ HashName:哈希值 - HashName_Extension:哈希值+后缀名 - - HashName_BundleName_Extension:资源包名+哈希值+后缀名 + BundleName_HashName:资源包名+哈希值 - **Copy Buildin File Option** @@ -78,17 +76,23 @@ 补丁包文件夹里包含补丁清单文件,资源包文件,构建报告文件等。 -![image](./Image/AssetBuilder-img4.png) +![image](./Image/AssetBuilder-img2.jpg) ### 补丁清单 -补丁清单是一个Json格式的文本文件。 +补丁清单文件是上图中以PatchManifest开头命名的文件。 -AssetList组记录的是主资源对象列表。 +- PatchManifest_DefaultPackage_xxxxxx.hash -BundleList组记录的是资源包列表。 + 记录了补丁清单文件的哈希值。 -![image](./Image/AssetBuilder-img2.png) +- PatchManifest_DefaultPackage_xxxxxx.json + + 该文件为Json文本格式,主要用于开发者预览信息。 + +- PatchManifest_DefaultPackage_xxxxxx.bytes + + 该文件为二进制格式,主要用于程序内读取加载。 ### Jenkins支持 @@ -109,10 +113,10 @@ private static void BuildInternal(BuildTarget buildTarget) buildParameters.BuildPipeline = EBuildPipeline.BuiltinBuildPipeline; buildParameters.BuildMode = EBuildMode.ForceRebuild; buildParameters.PackageName = "DefaultPackage"; - buildParameters.PackageVersion = "1.0.0"; + buildParameters.PackageVersion = "1.0"; buildParameters.VerifyBuildingResult = true; buildParameters.CompressOption = ECompressOption.LZ4; - buildParameters.OutputNameStyle = EOutputNameStyle.HashName_Extension; + buildParameters.OutputNameStyle = EOutputNameStyle.HashName; buildParameters.CopyBuildinFileOption = ECopyBuildinFileOption.None; // 执行构建 @@ -122,6 +126,10 @@ private static void BuildInternal(BuildTarget buildTarget) { Debug.Log($"构建成功 : {buildResult.OutputPackageDirectory}"); } + else + { + Debug.LogError($"构建失败 : {buildResult.FailedInfo}"); + } } // 从构建命令里获取参数示例 diff --git a/Docs/AssetBundleCollector.md b/Docs/AssetBundleCollector.md index f8e6f56..6f9ff36 100644 --- a/Docs/AssetBundleCollector.md +++ b/Docs/AssetBundleCollector.md @@ -1,10 +1,14 @@ # 资源收集 -![image](./Image/AssetCollector-img1.png) +![image](./Image/AssetCollector-img1.jpg) 左侧为分组列表,右侧为该分组的配置界面。 -导出按钮可以将配置数据导出为XML文件,导入按钮可以导入保存的XML文件。 +导入按钮:可以导入保存的XML文件。 + +导出按钮:可以将配置数据导出为XML文件。 + +修复按钮:在配置里的文件夹挪动位置之后,可以通过该按钮按钮来修正。 **注意**:该工具仅支持Unity2019.4+ @@ -13,11 +17,15 @@ - Show Packages 是否展示资源包列表视图。 - + +- Show Editor Alias + + 是否显示为中文模式。 + - Enable Addressable 启用可寻址资源定位系统。 - + - Unique Bundle Name 资源包名追加PackageName作为前缀。 @@ -36,10 +44,10 @@ //自定义扩展范例 public class DisableGroup : IActiveRule { - public bool IsActiveGroup() - { - return false; - } + public bool IsActiveGroup() + { + return false; + } } ```` @@ -83,18 +91,18 @@ - AddressByFileName 以文件名为定位地址。 - - AddressByGrouperAndFileName 以分组名称+文件名为定位地址。 + - AddressByGrouperAndFileName 以分组名+文件名为定位地址。 - - AddressByCollectorAndFileName 以收集器名+文件名为定位地址。 + - AddressByFolderAndFileName 以文件夹名+文件名为定位地址。 ````c# //自定义扩展范例 public class AddressByFileName : IAddressRule { - string IAddressRule.GetAssetAddress(AddressRuleData data) - { - return Path.GetFileNameWithoutExtension(data.AssetPath); - } + string IAddressRule.GetAssetAddress(AddressRuleData data) + { + return Path.GetFileNameWithoutExtension(data.AssetPath); + } } ```` @@ -102,21 +110,28 @@ 打包规则,规则可以自定义扩展。下面是内置规则: - - PackSeparately 以收集文件路径作为资源包名,每个资源文件单独打包。 - - PackDirectory 以收集文件所在的文件夹路径作为资源包名,该文件夹下所有文件打进一个资源包。 - - PackTopDirectory 以收集器路径下顶级文件夹为资源包名,该文件夹下所有文件打进一个资源包。 + - PackSeparately 以文件路径作为资源包名,每个资源文件单独打包。 + - PackDirectory 以文件所在的文件夹路径作为资源包名,该文件夹下所有文件打进一个资源包。 + - PackTopDirectory 以收集器下顶级文件夹为资源包名,该文件夹下所有文件打进一个资源包。 - PackCollector 以收集器路径作为资源包名,收集的所有文件打进一个资源包。 - - PackGrouper 以分组名称作为资源包名,收集的所有文件打进一个资源包。 + - PackGroup 以分组名称作为资源包名,收集的所有文件打进一个资源包。 - PackRawFile 目录下的资源文件会被处理为原生资源包。 ````c# //自定义扩展范例 public class PackDirectory : IPackRule { - string IPackRule.GetBundleName(PackRuleData data) - { - return Path.GetDirectoryName(data.AssetPath); //"Assets/Config/test.txt" --> "Assets/Config" - } + PackRuleResult IPackRule.GetBundleName(PackRuleData data) + { + //"Assets/Config/test.txt" --> "Assets/Config" + string bundleName = Path.GetDirectoryName(data.AssetPath); + PackRuleResult result = new PackRuleResult(bundleName, DefaultPackRule.AssetBundleFileExtension); + return result; + } + bool IPackRule.IsRawFilePackRule() + { + return false; + } } ```` @@ -133,13 +148,17 @@ //自定义扩展范例 public class CollectScene : IFilterRule { - public bool IsCollectAsset(FilterRuleData data) - { - return Path.GetExtension(data.AssetPath) == ".unity"; - } + public bool IsCollectAsset(FilterRuleData data) + { + return Path.GetExtension(data.AssetPath) == ".unity"; + } } ```` +- **UserData** + + 用户自定义数据,可以帮助定制化AddressRule和PackRule。 + - **AssetTags** 资源分类标签列表,该收集器下收集的资源会全部被打上该标签。 diff --git a/Docs/AssetBundleDeployer.md b/Docs/AssetBundleDeployer.md index f356a5a..8357dd2 100644 --- a/Docs/AssetBundleDeployer.md +++ b/Docs/AssetBundleDeployer.md @@ -4,22 +4,40 @@ 如果是本地测试,可以在本地创建一个WEB服务器,然后将补丁包拷贝到WEB服务器下。 -**按照游戏版本目录部署** +**部署目录** -在业务开发过程中,每个游戏版本实际都会创建一个SVN分支,该分支工程内每次构建的补丁包上传到对应的CDN目录下即可。 +在业务开发过程中,发版本之前都会创建一个SVN或GIT分支,以分支工程为基础去构建APP。 ```` CDN └─android - ├─v1.0 - ├─v1.1 - └─v2.0 + ├─v1.0(APP版本) + ├─v1.1(APP版本) + └─v2.0(APP版本) └─iphone - ├─v1.0 - ├─v1.1 - └─v2.0 + ├─v1.0(APP版本) + ├─v1.1(APP版本) + └─v2.0(APP版本) ```` -**游戏版本说明** +**APP版本说明** + +v1.0 代表的是APP版本,不是资源版本。在没有更换安装包的情况下,不需要新增加APP版本目录。 + +例如:我们游戏的当前APP版本是v1.0,那么每次生成的补丁文件全部覆盖到v1.0的目录下即可。 + +下面的示例里一共上传过2次补丁包。第二次上传的补丁包会把第一次的版本记录文件(PatchManifest_DefaultPackage.version)覆盖掉。当我们想回退资源版本的时候,把第一次生成的版本记录文件覆盖到同目录下即可。 + +```` +v1.0(游戏版本) +├─PatchManifest_DefaultPackage.version +├─PatchManifest_DefaultPackage_2023-02-01-654.hash +├─PatchManifest_DefaultPackage_2023-02-01-654.bytes +├─PatchManifest_DefaultPackage_2023-02-12-789.hash +├─PatchManifest_DefaultPackage_2023-02-12-789.bytes +├─2bb5a28d37dabf27df8bc6a4706b8f80.bundle +├─2dbea9c3056c8839bc03d80a2aebd105.bundle +├─6e8c3003a64ead36a0bd2d5cdebfbcf4.bundle +... +```` -v1.0 代表的是游戏版本,不是资源版本。在没有更换安装包的前提下,不需要递增这个游戏版本。每次生成的补丁包只需要覆盖掉当前游戏版本目录下即可。 diff --git a/Docs/CodeTutorial1.md b/Docs/CodeTutorial1.md index e9ede2d..54d4921 100644 --- a/Docs/CodeTutorial1.md +++ b/Docs/CodeTutorial1.md @@ -73,15 +73,17 @@ private class QueryStreamingAssetsFileServices : IQueryServices { public bool QueryStreamingAssets(string fileName) { - // 注意:使用了BetterStreamingAssets插件,使用前需要初始化该插件! + // StreamingAssetsHelper.cs是太空战机里提供的一个查询脚本。 string buildinFolderName = YooAssets.GetStreamingAssetBuildinFolderName(); - return BetterStreamingAssets.FileExists($"{buildinFolderName}/{fileName}"); + return StreamingAssetsHelper.FileExists($"{buildinFolderName}/{fileName}"); } } ```` ### 源代码解析 +Package.InitializeAsync()方法解析。 + - 编辑器模拟模式 每次启动调用EditorSimulateModeHelper.SimulateBuild()方法,都会在底层执行一次模拟构建(Simulate Build)。 @@ -90,11 +92,11 @@ private class QueryStreamingAssetsFileServices : IQueryServices - 单机运行模式 - 在初始化的时候,会直接读取内置清单文件(StreamingAssets文件夹里的文件),最后根据加载的清单去验证沙盒里缓存的文件。 + 在初始化的时候,会直接读取内置清单文件(StreamingAssets文件夹里的文件),最后初始化缓存系统。 - 联机运行模式 - 在初始化的时候,会优先从沙盒里加载清单,如果沙盒里不存在,则会尝试加载内置清单并将其拷贝到沙盒里。最后根据加载的清单去验证沙盒里缓存的文件。 + 在初始化的时候,会优先从沙盒里加载清单,如果沙盒里不存在,则会尝试加载内置清单并将其拷贝到沙盒里。最后初始化缓存系统。 **注意**:如果沙盒清单和内置清单都不存在,初始化也会被判定为成功! diff --git a/Docs/CodeTutorial2.md b/Docs/CodeTutorial2.md index 40a8624..e1dc220 100644 --- a/Docs/CodeTutorial2.md +++ b/Docs/CodeTutorial2.md @@ -16,8 +16,8 @@ private IEnumerator UpdateStaticVersion() if (operation.Status == EOperationStatus.Succeed) { //更新成功 - string PackageVersion = operation.PackageVersion; - Debug.Log($"Updated package Version : {PackageVersion}"); + string packageVersion = operation.PackageVersion; + Debug.Log($"Updated package Version : {packageVersion}"); } else { @@ -66,7 +66,7 @@ private IEnumerator UpdatePatchManifest() 用于下载更新资源标签指定的资源包文件。 -- YooAssets.CreateBundleDownloader(string[] locations, int downloadingMaxNumber, int failedTryAgain, int timeout) +- YooAssets.CreateBundleDownloader(AssetInfo[] assetInfos, int downloadingMaxNumber, int failedTryAgain, int timeout) 用于下载更新指定的资源列表依赖的资源包文件。 @@ -131,25 +131,37 @@ private IEnumerator Start() // 如果获取远端资源版本失败,说明当前网络无连接。 // 在正常开始游戏之前,需要验证本地清单内容的完整性。 string packageVersion = package.GetPackageVersion(); - var operation = package.CheckPackageContentsAsync(packageVersion); + var operation = package.PreDownloadPackageAsync(packageVersion); yield return operation; - if (operation.Status == EOperationStatus.Succeed) + if (operation.Status != EOperationStatus.Succeed) { - StartGame(); + ShowMessageBox("请检查本地网络,有新的游戏内容需要更新!"); + yield break; } - else + + int downloadingMaxNum = 10; + int failedTryAgain = 3; + int timeout = 60; + var downloader = operation.CreatePatchDownloader(downloadingMaxNum, failedTryAgain, timeout); + if (downloader.TotalDownloadCount > 0) { // 资源内容本地并不完整,需要提示玩家联网更新。 ShowMessageBox("请检查本地网络,有新的游戏内容需要更新!"); + yield break; } + + // 开始游戏 + StartGame(); } } ```` ### 源代码解析 +Package.UpdatePackageManifestAsync()方法解析。 + - 联机运行模式 - UpdatePackageManifestAsync()为资源清单更新方法。该方法的内部实现原理如下: + 通过传入的清单版本,优先比对当前激活清单的版本,如果相同就直接返回成功。如果有差异就从缓存里去查找匹配的清单,如果缓存里不存在,就去远端下载并保存到沙盒里。最后加载沙盒内匹配的清单文件。 - ![image](./Image/CodeTutorial2-img1.png) + diff --git a/Docs/CodeTutorial3.md b/Docs/CodeTutorial3.md index c5e30d2..5c7b699 100644 --- a/Docs/CodeTutorial3.md +++ b/Docs/CodeTutorial3.md @@ -6,7 +6,9 @@ - LoadAssetAsync() 异步加载资源对象 - LoadSubAssetsSync() 同步加载子资源对象 - LoadSubAssetsAsync() 异步加载子资源对象 +- LoadSceneSync() 同步加载场景 - LoadSceneAsync() 异步加载场景 +- LoadRawFileSync() 同步获取原生文件 - LoadRawFileAsync() 异步获取原生文件 **统一约定** @@ -152,6 +154,7 @@ IEnumerator Start() yield return handle; byte[] fileData = handle.GetRawFileData(); string fileText = handle.GetRawFileText(); + string filePath = handle.GetRawFilePath(); } ```` @@ -160,7 +163,7 @@ IEnumerator Start() 通过资源标签来获取资源信息列表。 ````c# -private GetAssetInfosByTag(string tag) +void GetAssetInfosByTag(string tag) { AssetInfo[] assetInfos = package.GetAssetInfos(tag); foreach (var assetInfo in assetInfos) diff --git a/Docs/GlobalSettings.md b/Docs/GlobalSettings.md index 4ddba0c..43e4f5c 100644 --- a/Docs/GlobalSettings.md +++ b/Docs/GlobalSettings.md @@ -1,6 +1,6 @@ # 全局配置 -![image](./Image/Settings-img1.png) +![image](./Image/Settings-img1.jpg) 通过右键创建配置文件(Project窗体内右键 -> Create -> YooAsset -> Create Setting) @@ -8,7 +8,5 @@ 配置说明: -- **Asset Bundle File Variant** : AssetBundle资源包后缀名 -- **Raw File Variant** : 原生资源包后缀名 - **Patch Manifest File Name** : 补丁清单文件名称 diff --git a/Docs/Image/AssetBuilder-img1.jpg b/Docs/Image/AssetBuilder-img1.jpg new file mode 100644 index 0000000..5be27f3 Binary files /dev/null and b/Docs/Image/AssetBuilder-img1.jpg differ diff --git a/Docs/Image/AssetBuilder-img1.png b/Docs/Image/AssetBuilder-img1.png deleted file mode 100644 index a40d9f2..0000000 Binary files a/Docs/Image/AssetBuilder-img1.png and /dev/null differ diff --git a/Docs/Image/AssetBuilder-img2.jpg b/Docs/Image/AssetBuilder-img2.jpg new file mode 100644 index 0000000..03e764d Binary files /dev/null and b/Docs/Image/AssetBuilder-img2.jpg differ diff --git a/Docs/Image/AssetBuilder-img2.png b/Docs/Image/AssetBuilder-img2.png deleted file mode 100644 index 3309a8b..0000000 Binary files a/Docs/Image/AssetBuilder-img2.png and /dev/null differ diff --git a/Docs/Image/AssetBuilder-img4.png b/Docs/Image/AssetBuilder-img4.png deleted file mode 100644 index 61abd81..0000000 Binary files a/Docs/Image/AssetBuilder-img4.png and /dev/null differ diff --git a/Docs/Image/AssetCollector-img1.jpg b/Docs/Image/AssetCollector-img1.jpg new file mode 100644 index 0000000..cd16329 Binary files /dev/null and b/Docs/Image/AssetCollector-img1.jpg differ diff --git a/Docs/Image/AssetCollector-img1.png b/Docs/Image/AssetCollector-img1.png deleted file mode 100644 index ea12162..0000000 Binary files a/Docs/Image/AssetCollector-img1.png and /dev/null differ diff --git a/Docs/Image/CodeTutorial2-img1.png b/Docs/Image/CodeTutorial2-img1.png deleted file mode 100644 index 116f202..0000000 Binary files a/Docs/Image/CodeTutorial2-img1.png and /dev/null differ diff --git a/Docs/Image/Settings-img1.jpg b/Docs/Image/Settings-img1.jpg new file mode 100644 index 0000000..c6115b3 Binary files /dev/null and b/Docs/Image/Settings-img1.jpg differ diff --git a/Docs/Image/Settings-img1.png b/Docs/Image/Settings-img1.png deleted file mode 100644 index 9bf7cc2..0000000 Binary files a/Docs/Image/Settings-img1.png and /dev/null differ diff --git a/Docs/Image/ShaderVariantCollector-img1.jpg b/Docs/Image/ShaderVariantCollector-img1.jpg new file mode 100644 index 0000000..5e8d372 Binary files /dev/null and b/Docs/Image/ShaderVariantCollector-img1.jpg differ diff --git a/Docs/Image/ShaderVariantCollector-img1.png b/Docs/Image/ShaderVariantCollector-img1.png deleted file mode 100644 index 3fdfe1c..0000000 Binary files a/Docs/Image/ShaderVariantCollector-img1.png and /dev/null differ diff --git a/Docs/ShaderVariantCollector.md b/Docs/ShaderVariantCollector.md index 1e8de9a..7a00d78 100644 --- a/Docs/ShaderVariantCollector.md +++ b/Docs/ShaderVariantCollector.md @@ -1,6 +1,6 @@ # 着色器变种收集 -![image](./Image/ShaderVariantCollector-img1.png) +![image](./Image/ShaderVariantCollector-img1.jpg) 点击搜集变种按钮开始收集,请耐心等待结束。