Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
爱黑铅笔的猫
minigame-unity-webgl-transform
提交
5499e440
M
minigame-unity-webgl-transform
项目概览
爱黑铅笔的猫
/
minigame-unity-webgl-transform
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
minigame-unity-webgl-transform
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
5499e440
编写于
7月 27, 2021
作者:
ocean2o11
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加资源预下载功能说明
上级
8b0e09fa
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
29 addition
and
168 deletion
+29
-168
Design/PerfOptimization.md
Design/PerfOptimization.md
+3
-2
Design/Plugin.md
Design/Plugin.md
+0
-144
Design/StartupOptimization.md
Design/StartupOptimization.md
+3
-1
Design/UsingAddressable.md
Design/UsingAddressable.md
+2
-4
Design/UsingLoader.md
Design/UsingLoader.md
+2
-15
Design/UsingPreload.md
Design/UsingPreload.md
+17
-0
README.md
README.md
+2
-2
image/usingpreload1.png
image/usingpreload1.png
+0
-0
未找到文件。
Design/PerfOptimization.md
浏览文件 @
5499e440
...
...
@@ -26,7 +26,7 @@ Unity WebGL导出形式相对于原生APP应用,需要开发者更关注性能
更多信息请参考:
*
[
提升Unity WebGL游戏启动速度
](
StartupOptimization.md
)
*
[
首场景启动优化
](
FirstSceneOptimization.md
)
*
[
代码分包
](
WasmSplit.md
)
*
[
使用代码分包工具
](
WasmSplit.md
)
### 3.2 资源按需加载
*
尽量避免在各级Resource包含资源,该目录将被直接打包在首资源包
...
...
@@ -36,7 +36,8 @@ Unity WebGL导出形式相对于原生APP应用,需要开发者更关注性能
更多信息请阅读:
*
[
使用Addressable进行资源按需加载
](
UsingAddressable.md
)
*
[
使用 AssetBundle 进行资源按需加载
](
UsingAssetBundle.md
)
*
[
使用预下载功能
](
UsingPreload.md
)
### 3.3 资源处理建议
*
贴图maxsize尽量不超过1024,小游戏环境适当降低画质
...
...
Design/Plugin.md
已删除
100644 → 0
浏览文件 @
8b0e09fa
# 使用Loader进行游游戏加载
## 一、什么是Unity Loader?
Unity Loader是在微信小游戏环境加载Unity WebGL游戏的加载与适配器,使用微信小游戏插件技术开发,功能包括:
-
WebAssembly代码分包加载与编译
-
资源加载与编译
-
启动进度显示
-
缓存策略
-
数据上报
## 二、如何使用Unity Loader插件
生成微信小游戏项目时,转换工具会在
`game.json`
中声明:
```
json
"plugins"
:
{
"UnityPlugin"
:
{
"version"
:
"major.minor.patch"
,
//
可切换版本号
"provider"
:
"wxe5a48f1ed5f544b7"
,
"contexts"
:
[
{
"type"
:
"isolatedContext"
}
]
}
}
```
这部分配置表示使用Unity Loader插件进行游戏加载,开发者无需手动修改
首次使用时,会提示添加插件,按提示添加即可
<image
src=
"../image/addPlugin.png"
>
## 三、配置Unity Loader功能
### 3.1 封面视频
由于Unity WebGL启动加载需要一定时间,因此需要使用视频或图片等内容作为过渡以留住玩家。Unity Loader默认使用视频+进度信息呈现,开发者可以自定义封面视频,可参考
[
启动Loader视频规范
](
video.md
)
进行配置。
### 3.2 预加载资源
为了充分利用网络带宽,在网络空闲时,比如下载完小游戏分包和首包资源后,可以预加载游戏需要用到的AB包。
```
js
let
managerConfig
=
{
/* 省略其他配置 */
/**
* 假设: AB包打包到 path1/StreamingAssets/WebGL这个目录下; STREAMING_CDN是以path1为根路径上传到服务器的CDN地址
*/
// 需要在网络空闲时预加载的资源,支持如下形式的路径。
preloadDataList
:
[
// '$STREAM_CDN/StreamingAssets/WebGL/textures_8d265a9dfd6cb7669cdb8b726f0afb1e',
// '/WebGL/sounds_97cd953f8494c3375312e75a29c34fc2'
],
}
```
## 3.3 缓存策略
由于缓存目录最大不可超过200M,在下载资源包、下载AB包时,若剩余空间不足以缓存,会进行缓存淘汰。目前规则比较简单,如下:
1.
如果所需空间过大,超过最大限制:下载完成后不缓存文件,也不执行清理逻辑,直接返回下载内容。
2.
清理部分文件可以缓存新文件:按最近使用时间从前往后排序清理,直到清理出所需空间。
> 因为文件解压只能解压到用户目录,所以,若压缩文件过大,无法解压到用户目录时,会返回失败。
### 3.4 可交互视频
***这个配置目前不是对所有游戏适用**
*
可交互视频相比默认版本的启动页,交互性更强,用户可以通过操作(目前是点击)来切换画面。
可交互视频实际是多段视频,通过点击来切换视频。
视频是流式加载,但也需要平衡好视频质量和视频大小,避免抢占带宽,影响游戏主要启动流程。
```
js
// 是否开启可交互视频
const
NEED_INTERACTION
=
false
// 需要使用可交互视频方案时,需要引入这两个文件
import
PageManager
from
'
./loading/pageManager
'
import
VideoManager
from
'
./loading/videoManager
'
if
(
NEED_INTERACTION
)
{
const
videoManager
=
new
VideoManager
({
// 填写一个或多个视频视频地址,可选择传入视频封面
videoList
:
[
// {
// src: '',
// poster: ''
// },
// {
// src: '',
// poster: ''
// }
]
})
const
pageManager
=
new
PageManager
({
// jumpBtnImg: 'images/jump-btn.png', // 跳过按钮图片地址,可本地,可远程
// continueBtnImg: 'images/PageTip.png', // 点击继续按钮图片地址,可本地,可远程
})
managerConfig
=
{
...
managerConfig
,
// 可交互视频相关配置
finalPageVideoUrl
:
''
,
// 点击跳过后,循环播放的视频地址,不传默认使用LOADING_VIDEO_URL
videoManager
,
pageManager
,
probability
:
0.3
,
// 可交互视频出现概率
}
// 点击跳过按钮
pageManager
.
eventEmitter
.
once
(
'
jumpClick
'
,
()
=>
{
const
gameManager
=
GameGlobal
.
manager
if
(
gameManager
)
{
gameManager
.
reportJump
()
gameManager
.
showFinalPage
()
}
})
// 点击继续按钮
pageManager
.
eventEmitter
.
on
(
'
continueClick
'
,
()
=>
{
videoManager
.
continue
()
})
// 可交互视频播放完毕
videoManager
.
once
(
'
allvideoEnd
'
,
()
=>
{
const
gameManager
=
GameGlobal
.
manager
pageManager
.
hideContinueBtn
()
gameManager
&&
gameManager
.
showFinalPage
()
})
// 每段视频开始前,隐藏点击继续按钮
videoManager
.
on
(
'
oneVideoStart
'
,
()
=>
{
pageManager
.
hideContinueBtn
()
})
// 每段视频播放完毕,显示点击继续按钮
videoManager
.
on
(
'
oneVideoEnd
'
,
()
=>
{
pageManager
.
showContinueBtn
()
})
}
```
### 3.5 手动可配置参看
在
`game.js`
中修改插件配置
### 基本配置
```
js
let
managerConfig
=
{
DATA_FILE_MD5
:
"
$DATA_MD5
"
,
// 转换脚本自动填写,无需关注
CODE_FILE_MD5
:
"
$CODE_MD5
"
,
// 转换脚本自动填写,无需关注
GAME_NAME
:
"
$GAME_NAME
"
,
// 转换脚本自动填写,无需关注
DATA_FILE_SIZE
:
"
$DATA_FILE_SIZE
"
,
// 资源文件大小,自动填写无需关注
APPID
:
"
$APP_ID
"
,
// 转换脚本自动填写,无需关注
LOADING_VIDEO_URL
:
"
$LOADING_VIDEO_URL
"
,
// 默认加载视频地址
DATA_CDN
:
"
$DEPLOY_URL
"
,
// 下载资源文件的CDN
STREAMING_CDN
:
"
$STREAM_CDN
"
,
// AB包存放地址,有用到AB包时需要填写
}
```
\ No newline at end of file
Design/StartupOptimization.md
浏览文件 @
5499e440
...
...
@@ -41,7 +41,7 @@ WASM分包的大小会直接影响代码下载时长以及程序初始化编译
>3. WASM编译对于低端机来说时间依然可观
>4. WASM编译在中高端机器很快,但对于低端机来说时间依然可观
我们建议原始代码包
**不超过30MB**
,
此处建议开发者
**勾选"Strip Engine Code"并设置"Managed Stripping Level"为High**
。同时,
开发者可以使用
[
代码分包
](
WasmSplit.md
)
工具将代码包减少到原始尺寸的到1/3。
我们建议原始代码包
**不超过30MB**
,
建议开发者
**勾选"Strip Engine Code"并设置"Managed Stripping Level"为High**
。同时,强烈建议
开发者可以使用
[
代码分包
](
WasmSplit.md
)
工具将代码包减少到原始尺寸的到1/3。
### 2.2.3 引擎初始化与开发者首帧逻辑
在timelog中呈现的首场景耗时即为引擎初始化与开发者首帧逻辑,关于该阶段耗时,开发者需要注意的是:
...
...
@@ -49,6 +49,8 @@ WASM分包的大小会直接影响代码下载时长以及程序初始化编译
>2. 初始场景不宜过大,通常呈现Splah场景即可
>3. 初始场景中需要后续主场景或配置加载时可采取分帧策略,切勿在Start/Awake阻塞。
我们建议开发者
[
使用预下载功能
](
Design/UsingPreload.md
)
,该功能可以利用此阶段的网络空闲期进行资源下载。
### 2.2.4 游戏内资源按需加载
前面我们提到开发者需要将资源从首包分离以较少首屏加载时间,同理,而对于其余的资源开发者最好使用按需加载的方式进行加载,减少玩家进行核心玩法的等待时间。
优化可参考
[
使用Addressable Assets System进行资源按需加载
](
UsingAddressable.md
)
。
...
...
Design/UsingAddressable.md
浏览文件 @
5499e440
...
...
@@ -214,10 +214,8 @@ public async Start() {
### 6.1 Addressable编译与部署
默认情况下,当编译Addressable资源时会输出到Library/com.unity.addressables/,项目发布为WebGL或转换为小游戏时Unity会自动拷贝Bundle文件到最终的生成目录下。我们只需要将对应的StreammingAssets上传到对应的CDN服务器即可。
### 6.2 资源预加载
<image
src=
'../image/addressable10.png'
width=
"700"
/>
我们可以根据资源的加载时序以及重要程度,修改game.js文件填写预加载资源列表。小游戏加载框架将利用网络空闲期进行资源预加载。
### 6.2 资源预下载
为了充分利用网络带宽,在网络空闲时可预下载游戏需要用到的AB包。详细配置请参考
[
使用预下载功能
](
UsingPreload.md
)
。
### 五、参考资料
...
...
Design/UsingLoader.md
浏览文件 @
5499e440
...
...
@@ -83,22 +83,9 @@ let managerConfig = {
```
-
若手动将
`loadDataPackageFromSubpackage`
改为false,需要将webgl目录下的资源包上传到CDN,并将CDN地址填写到game.js
`DATA_CDN`
字段
-
同样的,若手动将
`loadDataPackageFromSubpackage`
改为true,需要将webgl目录下的资源包copy到minigame/data-package下
### 3.3 预加载资源
为了充分利用网络带宽,在网络空闲时,比如下载完小游戏分包和首包资源后,可以预加载游戏需要用到的AB包。
```
js
let
managerConfig
=
{
/* 省略其他配置 */
/**
* 假设: AB包打包到 path1/StreamingAssets/WebGL这个目录下; STREAMING_CDN是以path1为根路径上传到服务器的CDN地址
*/
// 需要在网络空闲时预加载的资源,支持如下形式的路径。
preloadDataList
:
[
// '$STREAM_CDN/StreamingAssets/WebGL/textures_8d265a9dfd6cb7669cdb8b726f0afb1e',
// '/WebGL/sounds_97cd953f8494c3375312e75a29c34fc2'
],
}
```
### 3.3 预加载资源
为了充分利用网络带宽,在网络空闲时可预下载游戏需要用到的AB包。详细配置请参考
[
使用预下载功能
](
UsingPreload.md
)
。
### 3.4 资源缓存与淘汰策略
#### 资源缓存
...
...
Design/UsingPreload.md
0 → 100644
浏览文件 @
5499e440
# 使用预下载功能
## 概述
通过
[
启动流程与时序
](
Design/Startup.md
)
我们知道,在UnityLoader加载过程中存在网络空闲的情况。特别是“引擎初始化和首场景准备”,影响该步骤包括:引擎自身模块与数据初始化,游戏首个场景加载以及Awake流程。这个过程是CPU处理密集,但网络空闲的期间,根据机型性能不同,通常平均耗时会在3~6s左右,我们可以在此阶段提前下载资源。
## 配置预下载列表
<image
src=
'../image/usingpreload1.png'
width=
"500"
/>
在Unity转换导出插件填写文件列表,生成时工具会自动从webgl/StreamAssets目录找资源并填充到game.js。
运行时UnityLoader将根据列表内容在网络空闲期下载。
## 注意事项
1.
预下载所有文件总体积应控制在合理范围内,通常可以3~5MB左右的内容。
2.
文件数量应控制在10个以内,在此阶段最多只能允许10个并发,超过将会排队。
3.
UnityLoader插件已经考虑到业务会重复请求预下载的文件,游戏逻辑依然按未使用预下载的异步记载逻辑去些,如果预下载完成插件会立即返回内容,业务无感知。
\ No newline at end of file
README.md
浏览文件 @
5499e440
...
...
@@ -26,13 +26,13 @@
-
[
使用 Loader 进行游游戏加载
](
Design/UsingLoader.md
)
-
[
使用 Addressable 进行资源按需加载
](
Design/UsingAddressable.md
)
-
[
使用 AssetBundle 进行资源按需加载
](
Design/UsingAssetBundle.md
)
-
[
使用预下载功能
](
Design/UsingPreload.md
)
-
[
首场景启动优化
](
Design/FirstSceneOptimization.md
)
-
[
使用代码分包工具
](
Design/WasmSplit.md
)
-
[
启动留存数据上报统计
](
Design/ReportStartupStat.md
)
-
[
代码分包
](
Design/WasmSplit.md
)
-
[
使用水印保护代码包安全
](
Design/wasmWaterMark.md
)
-
运行性能
-
[
使用 Android CPU Profiler 性能调优
](
Design/AndroidProfile.md
)
-
[
使用 Unity Profiler 性能调优
](
Design/UnityProfiler.md
)
-
[
音频适配优化
](
Design/AudioOptimization.md
)
...
...
image/usingpreload1.png
0 → 100644
浏览文件 @
5499e440
58.8 KB
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录