我们以 Endless Runner 游戏发布到微信小游戏平台为示例,逐步介绍如何通过团结引擎的小游戏平台将您的游戏打包发布到目标平台。
新建工程 Endless Runner,下载EndlessRunner并由 Assets -> Import Package -> Custom Package 导入工程。
您可以通过以下两种方式打开指定 Build Profile 的构建配置 Inspector 窗口:
您可以自行在 Inspector 界面更改 Build 配置,包括 Build 的路径及其他设置。为方便后续操作,建议您先在 Build Path 处填写有效路径,若未填写并在 Build Settings 中选中,引擎将报错提示。
Inspector 界面底端 Player Settings Override 是每个配置文件独立的 Player Setting,如果有特定的 Player Setting 修改,可以点击 Customize Player settings 按钮后修改对应项。只作用于当前配置文件。未 Customize Player settings 的配置将采用全局的 Player Setting(即 File -> Build Settings -> Player Settings 界面的设置)。
本案例无特殊要求,使用默认生成的 Build Profile 即可,打包导出相关参数的填写将于后文介绍。
在本案例中,推荐通过 File -> Build Settings -> Player Settings 或 Edit -> Project Settings -> Player,修改全局 Player Settings,将 Texture Compression 改为 ASTC 并保存。首次切换到ASTC时,Texture压缩格式将会被转换,需要较长的时间。
开启ASTC压缩后,小游戏在移动端运行时可以节省大量内存和显存。
使用 AutoStreaming 功能需要配合 InstantGame Package 使用。
由 Window -> Package Manager ,选择 Unity Registry , 搜索 instant game , 点击 install 安装以下package最新版本:
如果在 PackageManager 中无法搜索到,请在项目的 Packages/manifest.json 文件中直接添加以下package:
"com.unity.instantgame": "1.0.11"
小游戏 AutoStreaming 功能默认使用 UOS CDN 作为部署 streaming 资源的云服务器,分离的资源将被托管至 UOS CDN 服务。UOS 在 CDN 基础上提供了便捷的云端资源的版本管理。具体操作可参考UOS云服务。
字段 | 描述 |
---|---|
App ID | UOS应用标识字符串; |
App Service Secret | UOS应用的认证密钥;该字符串作为上传 UOS CDN 文件的钥匙,请注意保密; |
Bucket | 文件桶,一个游戏对应一个 bucket,利用 UOS CDN 资源版本管理和增量上传的优势可以提高开发效率; |
release | 发布版本,AutoStreaming 每次上传文件到 UOS CDN,都会创建一个云服务器文件的 release; |
Badge | Badge 作为 release 的别名,用于固定资源下载的 url ;每次发布小游戏新版本时,务必创建一个新的 Badge 使用。 |
完成后网页将自动跳转到项目的概览页面,点击右侧的 CDN 免费试用 按钮开启 CDN 功能。
从设置页面获取 App ID 和 App Service Secret ,并填写到 Cfg & Publish 窗口的对应输入框中。
单击 Bucket to Use 栏 Refresh 按钮拉取 Endless_Runner 的 Bucket/Badge 信息。
选择或者创建新的 Bucket/Badge 并使用。以 Endless_Runner 为例,由于新建项目尚不存在 bucket 或 badge ,新建一个名为 Endless_Runner 的 bucket,并在该 bucket 下新建一个名为 v1 的 badge 。
注:UOS CDN 会为每一个 Bucket 自动生成一个名为 latest 的 badge ,每次上传文件,该 badge 位置都会自动更新,始终指向最新的资源版本,因此不要在提交给小游戏平台的版本中使用 latest ,以免后续资源更新时影响已发布版本。
在具体配置 AutoStreaming 之前,引擎需要知道哪些资产是当前游戏正在使用的。 大多数情况下,引擎 AutoStreaming 工具能够自动找到这些资产。
但通过 BuildPipeline.BuildAssetBundles ( string outputPath, **AssetBundleBuild[] builds**, ... )
从代码中打包的AB,无法被 AutoStreaming 自动搜索到,因此需要用户额外提供一个自定义AB中所有资产的列表文件。
可前往资产搜索和引用标签页面查看如何生成和设置资源列表文件。
配置游戏内 Texture 是否使用 Streaming 功能,以及 Streaming Placeholder 的类型。
AutoStreaming 用 Placeholder 图片替换游戏首包内的原始贴图,游戏运行时,先加载低分辨率/低信息量的贴图,快速启动游戏。当游戏首次使用到该 Texture 资源时,将触发引擎后台线程从 UOS CDN 云端下载原始贴图,完成后自动替换为原始贴图。
功能 | 描述 |
---|---|
Sync Texture | 搜索 BuildSettings 中的 Scenes 引用到的所有 Texture 资源; |
Force Rebuild | 勾选后点击Generate AssetBundles,将强制重新生成 texture 的 AssetBundles; |
Generate AssetBundles | 为所有勾选的 texture 生成 AB,每张贴图一个 AB; |
Generate Placeholders | 为所有勾选的 texture 生成一张低分辨率的替用贴图;也可以选择生成透明或者模糊形式; |
ConvertLegacySpritePacker | 将旧式的Sprite packer 图集转换成SpriteAtlas,从而获得Streaming支持;该功能会清理所有Sprite上的Packing Tag,使用前请对工程做好备份。 |
Use SpriteAtlas Placeholder in Addressable | 游戏中使用了图集并且打包到了Addressables中,将替换其中的图集为更小的variant图集。 |
进入 Window -> Auto Streaming -> Texture Streaming:
首次打包操作流程:
更新操作流程:
最新版本的团结引擎已支持增量打包,能够显著提高打包效率。如果需要也可以勾选 Force Rebuild ,强制全部重新打包。
注: 如果游戏中使用了图集 SpriteAtlas ,并且图集打包到了 Addressables 中,请在上述操作完成后,需要额外点击按钮 “Use SpriteAtlas Placeholder in Addressable” 来替换其中的图集为小图。
配置游戏内的 Audio/Mesh/Animation 资源是否使用 streaming 功能。
AutoStreaming 支持将本地较大的音频和mesh等资源内的数据从游戏首包/AB 中抽离出来,部署UOS CDN服务器上。当游戏首次使用到该Audio/Mesh/Animation资源时,将触发引擎后台线程下载资源数据,完成后自动加载使用。
注:如果某个 Audio/Mesh/Animation 勾选了 Streaming 导致游戏出现问题(勾选 Streaming 会使 Audio/Mesh 的数据延迟,在代码中对该 Audio/Mesh 进行了读写操作, 可能出现问题),取消勾选该 Audio/Mesh/Animation 即可。
选择 BuildSettings 中的场景打包成 AssetBundle,并部署到UOS CDN服务器上。
开发者像往常一样通过 SceneManager 调用 LoadScene 或 LoadSceneAsync。底层将自动触发下载,完成后自动加载场景。 详细信息可前往Auto Streaming用法 Scene小节了解。
功能 | 描述 |
---|---|
Sync Scenes | 获取 Build setting 中的Active的所有场景,并在下方显示; |
Force Rebuild | 勾选后,点击Generate ABs时将强制重新生成所有场景的AB; |
Generate AssetBundle | 生成场景的AB,以及场景共享资源AB; |
Sync SharedAssets | 搜索勾选了Streaming的场景中的共同引用到的资源。 |
Scenes 列表中建议勾选除首场景外的其他所有场景,首场景若开启Streaming,启动时会有明显的黑屏时间,因此不建议勾选。
Shared Assets列表中,建议仅勾选对场景AB总量影响严重的资源,并且尽量排除FBX文件,如:
使用流程:点击 Sync Scenes → 选择需要 Streaming 的场景 → 点击 Sync SharedAssets → 勾选 SharedAssets 资源 → 如果已经生成过场景AB,勾选 Force Rebuild → 点击左上角的 Generate ABs 。
*Scene Streaming 依赖于 Texture/Audio/Mesh/Animation/Font Streaming 的配置,请务必先执行前面的操作。
游戏中如果存在以下使用情况,需要在配置好 Texture/Audio/Mesh/Animation Streaming 后完全重新打包(删除已有AB后打包),从而抽取出AB中的重度资源(纹理、网格等):
游戏工程使用了 AB
游戏工程使用了 Addressables
*AB/Addressables 中的资源抽取依赖于 Texture/Audio/Mesh/Animation/Font Streaming 的配置,请务必先执行前面的操作。
由于 WebGL 不存在本地文件,因此所有的 AB/Addressables 和都需要上传到 CDN ,运行时通过网络下载。而下载需要时间,因此游戏逻辑中通常需要支持异步加载 AB 的,或者提前准备好所需 AB ,这与是否使用 AutoStreaming 方案无关,详细介绍请参考小游戏平台简介中文件系统和网络小节。
如果项目中使用了 AB 或 Addressables ,且文件并非存放在 StreamingAssets 目录,则需要在 AB/Addressable 后增加一次文件拷贝操作,请参考UOS上传和下载文件了解详细操作。
Endless Runner 游戏工程使用了 Asset bundle 进行资源打包,在这里将重新打包AB,需要注意将打包平台修改为 BuildTarget.WeixinMiniGame
或 EditorUserBuildSettings.activeBuildTarget
。
GetPlatformForAssetBundles
方法中添加该平台: #if UNITY_EDITOR
private static string GetPlatformForAssetBundles(BuildTarget target)
{
switch (target)
{
...
case BuildTarget.WeixinMiniGame:
return "WeixinMiniGame";
...
}
}
#endif
private static string GetPlatformForAssetBundles(RuntimePlatform platform)
{
switch (platform)
{
...
case RuntimePlatform.WeixinMiniGamePlayer:
return "WeixinMiniGame";
...
}
}
然后按照以下步骤打包:
如果已经打包过 AB ,删除 StreamingAssets 目录下的 AB 包
点击 AssetBundles -> Build AssetBundles 重新打包 AB
Endless Runner 项目将 AB 打包到了 StreamingAssets 目录下,该目录的上传已由 AutoStreaming 工具自动化处理。这里我们不考虑版本更新问题,因此打包 AB 时未使用带 hash 的文件名。
本案例未配置 TextureManager ,AutoStreaming 和 TextureManager 详情可见资产流式加载章节。
如果有使用 HTTP/2 或 HTTP/3 协议的需求,请前往UOS CDN网站,找到游戏使用的项目和bucket,点击右上角的三个小点,选择 开启 HTTP/2 传输 或者 开启 HTTP/3 传输。
MiniGame 微信小游戏平台默认安装微信小游戏转换SDK插件,若您的团结引擎未显示,请参考 微信小游戏转换SDK。
微信小游戏导出目前有两条路径,选择其一即可:
您需要填写:
由于 Scene 和 Texture 的 AutoStreaming 文件会在上传前计算 hash 并保存在首包中,打包前请先确认 AutoStreaming 页面的 Texture Streaming -> Generate AssetBundles 和 Scene Streaming -> Generate ABs 操作已执行。
若您上一条使用了转换小游戏界面,点按钮 “生成并转换” 开始打包,该步骤需要5分钟左右。
若您使用的是 Build Profile 的 Inspector 进行配置,在 File -> Build Settings 界面,确认配置后的文件已拖入 Build Profiles 框,选中左侧小框后,点击右下角 “Build” 开始打包。打包后可在 Console 查看具体信息,详情请查阅小游戏构建配置 Build 小节。
如果使用了 AutoStreaming ,完成后会自动上传首包数据文件到 UOS CDN 。
如未使用 AutoStreaming ,请将首包数据文件上传到微信小游戏页面填写的{游戏资源CDN}根目录。 如果有填写 “Data File Sub Prefix” 字段,则上传到该子目录下。
打包时如果遇到下面的报错,请确认安装了 Node.js , 并且在系统环境变量的路径中添加了 Node.js 安装路径。添加在用户环境变量路径下可能无效。
微信开发者工具打开小游戏工程后,游戏将自动开始运行。
打开 Simulator(模拟器) 和 Debugger(调试器),以查看游戏画面和调试信息。点击右侧 Compile(编译) 按钮,可以重新启动小游戏。
*微信开发者工具中运行时,如果出现 “插件未授权使用 添加插件” 的错误提示,请点击“添加插件”按钮, 并且确认是否使用了测试游戏AppID。
CDN 如果未开启 gz/br 压缩,在微信开发者工具的 log 中将有如下提示:
UOS CDN gzip/br 压缩可通过 accept-encoding 控制,微信小游戏已自动添加 “gzip,deflate,br” ,因此无需额外操作。
开发版本: 微信开发者工具上点击 Preview(预览) 生成二维码,扫码后可在手机(同一微信账号)上测试;若他人参与测试,需要申请正式的小游戏AppID,并在微信后台添加测试人员的微信账号。
体验版本: 使用正式的小游戏AppID打包的小游戏,可点击右侧 Upload(上传) 按钮,填写版本号和版本描述,上传体验版本。然后在 微信小游戏后台管理/版本管理/开发版本 中找到上传的版本,将其设置为体验版。该版本后续可用于提审发布。
如果遇到资源下载失败,404的错误。请点开手机右上角三个小点,找到并打开 开发调试->打开调试。或按照步骤20,在微信小游戏后台添加白名单。
扫码登录微信小程序网页后,前往 开发管理-> 开发设置 -> 服务器域名 , 在 request合法域名 和 downloadFile合法域名 中填写使用的域名。 如果游戏中使用到了其他类型的网络链接,如 websocket ,需要在 socket合法域名 内填写。
AutoStreaming 使用到的域名: 请填写以下域名:
https://a.unity.cn;
https://a.unity3dcloud.cn;
https://asset-streaming-content.unity.cn;
开启 http/2 或 http/3 后需添加以下域名:
https://a2.unity3dcloud.cn;
https://a3.unity3dcloud.cn;
如果项目工程中引用了 Analytics Package,小游戏运行时可能出现 cdp.cloud.unity.com, cdp.cloud.unity.cn 或 cdp.tuanjie.cn 等域名的请求。 请前往 Windows -> General -> Services 关闭, 并且在 Package Manager 中移除 Analytics 。