提交 17d19530 编写于 作者: J junkunzhang

docs: 导出配置.bundle缓存规则说明

上级 011ad778
# 资源服务器部署注意事项
# 资源部署与缓存
在转换完成后,会在导出路径下生成如下目录
```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
......@@ -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)打开转化后的小游戏进行预览。
......
......@@ -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 其他可配置参看
......
image/export.png

270.4 KB | W: | H:

image/export.png

196.9 KB | W: | H:

image/export.png
image/export.png
image/export.png
image/export.png
  • 2-up
  • Swipe
  • Onion skin
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册