diff --git a/Design/DataCDN.md b/Design/DataCDN.md index 05c4ccf31f42668cb9362ff2002d449c9d48627f..d0ab08526492dfcb7faeab0f59818657e62b0f6a 100644 --- a/Design/DataCDN.md +++ b/Design/DataCDN.md @@ -1,23 +1,85 @@ -# 资源服务器部署注意事项 +# 资源部署与缓存 +在转换完成后,会在导出路径下生成如下目录 +```bash +. +├── backup +├── minigame +└── webgl +``` +- webgl目录为游戏对应的webgl版本。 +- minigame目录为转化后的小游戏代码。 +- 如果使用纹理压缩会生成backup目录用于存放原始纹理。 -## 远程部署的资源 -Unity WebGL转换小游戏主要有两个游戏阶段需要下载资源: -- 首资源包 -- 按需加载资源 +其中webgl目录结构如下: -### 首资源包 -包含:**Unity builtin + 勾选的导出场景 + Resources**. +```bash +. +├── 01367b188873c923.webgl.data.unityweb.bin.txt +├── Assets +│   ├── 15032.wav +│   ├── Audio +│   └── Textures +├── Build +│   ├── UnityLoader.js +│   ├── webgl.data.unityweb +│   ├── webgl.json +│   ├── webgl.wasm.code.unityweb +│   ├── webgl.wasm.framework.unityweb +│   └── webgl.wasm.symbols.unityweb +├── StreamingAssets +│   └── AssetBundles +├── index.html +└── texture-config.js +``` +## 资源部署 +**导出目录中,webgl目录如下三个文件和目录是可能需要远程部署的资源:** +```bash +. +├── 01367b188873c923.webgl.data.unityweb.bin.txt +├── Assets +├── StreamingAssets +``` -下载方式:小游戏支持“小游戏分包” 与 “CDN”两种方式下载。如果使用“小游戏分包“则需要足够小,因为所有小游戏包体积不能超过**20MB**。 +### 首资源包 +首资源包即`01367b188873c923.webgl.data.unityweb.bin.txt`,包含**Unity builtin + 勾选的导出场景 + Resources**资源。 +注意:加载方式取决于导出选项中的`首包资源加载方式`。同时由于小游戏总包体不能超过**20MB**,实际首包资源加载方式会根据包体决定,更多信息可查看[UnityLoader-首包资源加载方式](UsingLoader.md) +- 小游戏分包:因需要统计总包体大小,当导出时wasm代码brotli压缩正常的前提下,如果wasm代码+首包资源小于20MB,可使用小游戏分包加载,此时**不需要将首包资源部署到服务器**。 +- CDN:当不使用小游戏分包时,需要部署到服务器。 -### 按需加载资源 -包含:AB/AA下载的资源,通常使用LZ4压缩。 +### Assets +如果有用到纹理压缩和微信音频API,导出插件自动生成。将此目录部署到服务器即可 -下载方式:需要自行使用**CDN服务器**进行托管。 +### StreamingAssets +AssetBundle和Addressables资源目录。 +如果是用的AA,构建时默认打包到StreamingAssets目录下。但如果是用的AB,或者自定义了bundle的生成目录,需要将bundle移动到StreamingAssets目录 -## 资源服务器注意事项 +### 资源服务器注意事项 1. 针对txt文件进行开启Brotli或gzip压缩,**首资源包有非常高的压缩率** 2. CDN服务器开启跨域设置(否则**iOS可能会出现跨域加载失败**的情况) 3. MP开发者后台为CDN域名添加到"安全域名" 4. 小游戏资源下载并发数为10,超过时底层自动排队 5. 单个请求文件最大**不超过100MB,超时默认为60s** + +## 资源缓存 +这里主要讲UnityLoader的资源缓存策略。 + +### 资源缓存规则 + +- 首资源包自动缓存 +- wasm代码自动缓存 +- AB和AA特定情况下缓存 + +需要注意的是AB和AA的缓存规则 +#### AB和AA缓存 +如果请求URL包含StreamingAssets,则插件判定为是在下载bundle文件,会自动进行缓存提升二次启动速度。 +所以需要自动缓存的文件,可放到StreamingAssets目录下。 + +但请注意以下几点: +1. 文件名需要带上hash [BuildAssetBundleOptions.AppendHashToAssetBundleName](https://docs.unity3d.com/ScriptReference/BuildAssetBundleOptions.AppendHashToAssetBundleName.html),以便清理掉该文件的旧缓存。默认32位长度,如果游戏可通过导出选项中`Bundle名中Hash长度`来自定义。比如游戏自己计算了crc,可将`Bundle名中Hash长度`设置为crc长度。 +2. 配置到不自动缓存文件类型中的文件,不会自动缓存,默认值是json,比如addressable打包后生成StreamingAssets/aa/WebGL/catalog.json,这个文件不会自动缓存。 + +### 资源淘汰规则 +由于缓存目录最大不可超过200M,在下载资源包、下载AB包时,若剩余空间不足以缓存,会进行缓存淘汰。目前规则比较简单,如下: +1. 如果所需空间过大,超过最大限制:下载完成后不缓存文件,也不执行清理逻辑,直接返回下载内容。 +2. 清理部分文件可以缓存新文件:按最近使用时间从前往后排序清理,直到清理出所需空间。 +3. 如果去除hash后是同名文件(相同路径下同名):清理掉旧的资源。 \ No newline at end of file diff --git a/Design/Transform.md b/Design/Transform.md index d9f40dc8a559097db5af99cc89b4a0dab2855c19..fcccc7b9229ab4e90781e18506b5ec29e32509f0 100644 --- a/Design/Transform.md +++ b/Design/Transform.md @@ -19,23 +19,24 @@ 其中: 1. 必须 - 游戏appid:小游戏的appid -- 游戏资源CDN:首包资源加载方式选择CDN时,需要提供游戏首包资源所在HTTP或CDN地址 +- 游戏资源CDN:游戏资源所在HTTP或CDN地址 +- 导出路径:转换后文件目录 2. 可选 - 小游戏项目名:开发者工具中展示的小游戏项目名 - 首包资源加载方式:CDN-使用CDN下载首包资源;小游戏分包-使用小游戏代码分包下载资源 -- AB包CDN地址:用到AB包时需要,地址为StreamingAssets目录的上一级目录 - 加载阶段视频URL:启动需要一定耗时,在启动加载时会循环播放这段视频,视频格式请参考[视频规范](video.md) -- Assets目录对应CDN地址:使用压缩纹理时,生成的webgl目录下会包含Assets目录,填写Assets目录对应CDN地址 -- 游戏内存大小:playersetting中memorysize -- 游戏方向:游戏是横屏还是竖屏 +- 启动背景/视频封面图:启动阶段背景图片;如果配置了加载阶段视频URL,则作为视频封面。 +- 游戏方向:游戏是横屏还是竖屏,可选值参考[deviceOrientation](https://developers.weixin.qq.com/minigame/dev/reference/configuration/app.html) +- 不自动缓存文件类型:游戏资源CDN下不自动缓存的文件类型,具体参见[AssetBundle缓存]](UsingLoader.md) +- Bundle名中Hash长度:自定义AssetBundle名中Hash长度用于缓存控制,具体参见[AssetBundle缓存](UsingLoader.md) +- 预下载列表:网络空闲时预下载的资源,[使用预下载](UsingPreload.md) +- SDK功能选项:[好友关系链](OpenData.md) [音频优化](AudioOptimization.md) +- 调试编译选项 -生成目录下 webgl目录为游戏对应的webgl版本,minigame目录为转化后的小游戏代码。 +转换完成后,参照[资源部署与缓存](DataCDN.md)章节进行资源部署,并了解启动Loader在加载资源时的缓存逻辑。 注意: -* 若首包资源加载方式选择'小游戏分包',会根据生成的wasm代码包和首包资源大小是否超过20M,若超过还是会使用CDN加载,参考[使用Loader进行游游戏加载](UsingLoader.md) -* 若首包资源加载方式选择'CDN',将生成目录下的`webgl/ProjectName.data.unityweb.bin.txt`上传至“游戏资源CDN”。您的CDN最好支持Brotli或gzip压缩txt文件,这样能减少网络传输数据和时间。 * 项目使用了小游戏Unity适配插件,若小游戏是第一次使用本插件,在开发者工具会报错提示插件未授权,具体可参考[使用Loader进行游游戏加载](UsingLoader.md) -* 使用AssetsBundle时,请将资源上传到“AB包CDN地址” 至此,可以在[微信开发者工具](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html)打开转化后的小游戏进行预览。 diff --git a/Design/UsingLoader.md b/Design/UsingLoader.md index bfdef729cb572c8d1f83f997e90bd93981bed651..d5403c228f47b8240e142fff0c99f691067dcf81 100644 --- a/Design/UsingLoader.md +++ b/Design/UsingLoader.md @@ -90,18 +90,19 @@ let managerConfig = { ### 3.4 资源缓存与淘汰策略 #### 资源缓存 首包资源和wasm代码会自动缓存。 -使用bundle时,插件也会做缓存处理,但插件需根据下载文件名进行处理,因此需要注意: -1. bundle文件名不可重名,否则同名文件无法使用缓存 -2. bundle名需要带上md5 [BuildAssetBundleOptions.AppendHashToAssetBundleName](https://docs.unity3d.com/ScriptReference/BuildAssetBundleOptions.AppendHashToAssetBundleName.html),以便清理掉该文件的旧缓存 -3. bundle存放路径需要包含StreamingAssets这个path(一般addressable默认打包会放在StreamingAssets/aa/WebGL/WebGL/这个目录下),或者文件名包含.bundle,才能启用缓存 +#### assetbundle缓存 +如果请求URL包含StreamingAssets,则插件判定为是在下载assetbundle文件,会自动进行缓存提升二次启动速度。 +所以需要自动缓存的文件,可放到StreamingAssets目录下。 + +但请注意以下几点: +1. 文件名需要带上hash [BuildAssetBundleOptions.AppendHashToAssetBundleName](https://docs.unity3d.com/ScriptReference/BuildAssetBundleOptions.AppendHashToAssetBundleName.html),以便清理掉该文件的旧缓存。默认32位长度,如果游戏可通过导出选项中`Bundle名中Hash长度`来自定义。比如游戏自己计算了crc,可将`Bundle名中Hash长度`设置为crc长度。 +2. 配置到不自动缓存文件类型中的文件,不会自动缓存,默认值是json,比如addressable打包后生成StreamingAssets/aa/WebGL/catalog.json,这个文件不会自动缓存。 #### 资源淘汰 由于缓存目录最大不可超过200M,在下载资源包、下载AB包时,若剩余空间不足以缓存,会进行缓存淘汰。目前规则比较简单,如下: 1. 如果所需空间过大,超过最大限制:下载完成后不缓存文件,也不执行清理逻辑,直接返回下载内容。 2. 清理部分文件可以缓存新文件:按最近使用时间从前往后排序清理,直到清理出所需空间。 - -> 因为文件解压只能解压到用户目录,所以,若压缩文件过大,无法解压到用户目录时,会返回失败。 ### 3.5 其他可配置参看 diff --git a/image/export.png b/image/export.png index 2685a138965e2fcf293d78d8cad0c0a546c795f5..187ce919be17d4c069221914dd28e5b4abb800a5 100644 Binary files a/image/export.png and b/image/export.png differ