Version: 1.4
语言 : 中文
下载与安装
小游戏开发

快速上手

我们以 Endless Runner 游戏发布到微信小游戏平台为示例,逐步介绍如何通过团结引擎的小游戏平台将您的游戏打包发布到目标平台。

1. 新建工程

  • 新建工程 Endless Runner,下载EndlessRunner并由 Assets -> Import Package -> Custom Package 导入工程。

2. 配置构建文件

  1. File -> Build Settings 点击 Switch Platform 切换平台至 MiniGame
  2. Build Settings 界面右侧 Sub Platforms 会显示支持的平台,按钮若为 “Install Support”,表示缺失该平台的包,点击手动下载后才能添加对应的 Build Profile 文件。
  3. 点击按钮 “Add Build Profile” 后,Projects > Assets > Setting > Build Profiles 资产界面会出现对应新增的 Build Profile 资产。
  4. 为了方便后续进行构建配置,您可以先将对应的文件拖入 Build 界面的 Build Profiles 框内。

3. 更改构建配置

您可以通过以下两种方式打开指定 Build Profile 的构建配置 Inspector 窗口:

  • 单击 Projects > Assets > Setting > Build Profiles 资产界面中的文件图标;
  • 双击 File -> Build Settings 中 Build Profiles 框内的文件。

您可以自行在 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 即可,打包导出相关参数的填写将于后文介绍。

4. 适配纹理格式(ASTC)

  • 在本案例中,推荐通过 File -> Build Settings -> Player SettingsEdit -> Project Settings -> Player,修改全局 Player Settings,将 Texture Compression 改为 ASTC 并保存。首次切换到ASTC时,Texture压缩格式将会被转换,需要较长的时间。

    开启ASTC压缩后,小游戏在移动端运行时可以节省大量内存和显存。

5. 配置 Graphics API

  • Edit -> Project Settings -> Player -> Other Settings 页面,取消勾选 Auto Graphics API ,仅保留 WebGL 1 或 WebGL 2 。可以减少shader变体数量,从而减小首包和启动时间。
    • 使用WebGL 1时, 若 Lightmap Encoding 为 High Quality ,将其改为 Normal
    • iOS平台上使用 WebGL 2.0 需要系统版本高于15.0,并且打开iOS高性能模式,否则可能出现进入游戏后白屏的情况。

6. 安装 InstantGame Package

使用 AutoStreaming 功能需要配合 InstantGame Package 使用。

  • Window -> Package Manager ,选择 Unity Registry , 搜索 instant game , 点击 install 安装以下package最新版本:

  • 如果在 PackageManager 中无法搜索到,请在项目的 Packages/manifest.json 文件中直接添加以下package: "com.unity.instantgame": "1.0.11"

7. 配置 AutoStreaming 功能

  • Windows -> Auto Streaming 进入 Instant Game 窗口,该窗口包含了打包小游戏前的资源 Streaming 设置,以及上传云资源到 UOS CDN 的设置。
  • 切换至 Cfg & Publish 窗口,勾选 Use AutoStreaming,如果后续需要使用一般的打包流程,取消勾选该选项即可。
    • (可选)勾选 Use Font Streaming ,开启字体资源的Streaming。
    • 将下载的 Autostreaming 原始纹理AB缓存在内存当中,以减少纹理模糊的时间,会明显提升内存使用
    • Max Cocurrent Load 参数用以设置 AutoStreaming 最大后台下载和加载任务数量。区间为 0–20,值为0时,则使用引擎默认值。

8. 配置 UOS CDN 服务

小游戏 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 使用
  • 前往Unity Online Service 首页,登陆后进入应用面板,点击灰色的 + 新建应用,创建一个名为 Endless_Runner 的项目,然后启用UOS(如已有 Endless_Runner 项目可直接启用 UOS;若无,点击列表右上角的 “创建新的项目”)。

  • 完成后网页将自动跳转到项目的概览页面,点击右侧的 CDN 免费试用 按钮开启 CDN 功能。

  • 设置页面获取 App IDApp 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 ,以免后续资源更新时影响已发布版本。

9. 配置资产列表

在具体配置 AutoStreaming 之前,引擎需要知道哪些资产是当前游戏正在使用的。 大多数情况下,引擎 AutoStreaming 工具能够自动找到这些资产。

但通过 BuildPipeline.BuildAssetBundles ( string outputPath, **AssetBundleBuild[] builds**, ... )从代码中打包的AB,无法被 AutoStreaming 自动搜索到,因此需要用户额外提供一个自定义AB中所有资产的列表文件。

可前往资产搜索和引用标签页面查看如何生成和设置资源列表文件。

  • Endless Runner游戏工程中没有使用该方式打包AB,因此跳过该步骤。

10. 配置 Texture Streaming

配置游戏内 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

首次打包操作流程

  1. 点击 convertLegacySpritePacker(可选);
  2. 点击 Sync Texture 搜索所有 Texture 资源, Ctrl + A 选中所有图片,再勾选 OnDemandDownload
  3. 点击 Generate AssetBundles ,为所有勾选的 texture 生成 AB,每张贴图一个 AB;
  4. 点击表头按生成的AB大小排序,取消勾选 AB 过小的图片(例如小5KB,可按住Shift多选);
  5. 再次点击 Generate AssetBundles ,清理不需要的AB ;
  6. 最后点击 Generate Placeholders

更新操作流程

  1. 点击 Sync Texture
  2. 调整 OnDemandDownload 的勾选;
  3. 点击 Generate AssetBundles 重新生成AB ;
  4. 点击 Generate Placeholders

最新版本的团结引擎已支持增量打包,能够显著提高打包效率。如果需要也可以勾选 Force Rebuild ,强制全部重新打包。

注: 如果游戏中使用了图集 SpriteAtlas ,并且图集打包到了 Addressables 中,请在上述操作完成后,需要额外点击按钮 “Use SpriteAtlas Placeholder in Addressable” 来替换其中的图集为小图。

11. 配置 Audio/Mesh/Animation Streaming

配置游戏内的 Audio/Mesh/Animation 资源是否使用 streaming 功能。

AutoStreaming 支持将本地较大的音频和mesh等资源内的数据从游戏首包/AB 中抽离出来,部署UOS CDN服务器上。当游戏首次使用到该Audio/Mesh/Animation资源时,将触发引擎后台线程下载资源数据,完成后自动加载使用。

  • 使用流程:在对应页面点击 Sync Audios/Meshes/Animations → 勾选 RT Mem 较大(例如大于5K)的资源。

注:如果某个 Audio/Mesh/Animation 勾选了 Streaming 导致游戏出现问题(勾选 Streaming 会使 Audio/Mesh 的数据延迟,在代码中对该 Audio/Mesh 进行了读写操作, 可能出现问题),取消勾选该 Audio/Mesh/Animation 即可。

12. 配置场景 Streaming

选择 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文件,如:

  1. 被大多数场景引用到的资源(References中包含场景序号较多的资源)
  2. 本身较大的Shader、字体等资源

使用流程:点击 Sync Scenes → 选择需要 Streaming 的场景 → 点击 Sync SharedAssets → 勾选 SharedAssets 资源 → 如果已经生成过场景AB,勾选 Force Rebuild → 点击左上角的 Generate ABs

*Scene Streaming 依赖于 Texture/Audio/Mesh/Animation/Font Streaming 的配置,请务必先执行前面的操作。

13. 重新打包 AB/Addressables

游戏中如果存在以下使用情况,需要在配置好 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.WeixinMiniGameEditorUserBuildSettings.activeBuildTarget

  • 由于切换到了新的平台MiniGame,因此需要在 Assets\AssetBundleManager\Utility.cs 的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 详情可见资产流式加载章节。

14.配置 CDN http 协议版本(可选)

如果有使用 HTTP/2 或 HTTP/3 协议的需求,请前往UOS CDN网站,找到游戏使用的项目和bucket,点击右上角的三个小点,选择 开启 HTTP/2 传输 或者 开启 HTTP/3 传输。

  • 开启后注意按照步骤20中的提示添加域名白名单,否则真机运行将提示下载失败。

15.安装微信开发者工具

16.添加微信小游戏转换SDK

MiniGame 微信小游戏平台默认安装微信小游戏转换SDK插件,若您的团结引擎未显示,请参考 微信小游戏转换SDK

17.配置微信小游戏导出参数

微信小游戏导出目前有两条路径,选择其一即可:

  • 菜单工具栏 微信小游戏 -> 转换小游戏
  • (操作2、3中设置的配置文件)Projects > Assets > Settings > Build Profiles 资产界面中的 Build Profile,单击显示 Inspector 详情;

您需要填写:

  • 游戏Appid: 可从微信小游戏开发工具里点击 注册(register) 去申请正式 AppID,使用测试 AppID 部分功能受限;
  • 游戏资源CDN: 游戏资源CDN根目录。即 Window -> Auto Streaming -> Cfg & Publish 中的 Auto Streaming Path
  • 小游戏项目名称: 导出的微信小游戏项目名称;
  • 游戏方向:横竖屏,根据游戏画面选择;
  • 导出路径 / Build Path: 生成微信小游戏工程的位置,后续步骤需要打开其中的小游戏目录。

18.导出并转换成微信小游戏

由于 Scene 和 Texture 的 AutoStreaming 文件会在上传前计算 hash 并保存在首包中,打包前请先确认 AutoStreaming 页面的 Texture Streaming -> Generate AssetBundlesScene 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 安装路径。添加在用户环境变量路径下可能无效。

19.在微信开发者工具中打开工程

  • 打开微信开发者工具,选 Mini Game(小游戏) 工程类型,点 import(导入) 按钮,选择步骤16中生成的 wechat/minigame 文件夹。注意不要选错目录。

20.在微信开发者工具中测试

微信开发者工具打开小游戏工程后,游戏将自动开始运行。

打开 Simulator(模拟器)Debugger(调试器),以查看游戏画面和调试信息。点击右侧 Compile(编译) 按钮,可以重新启动小游戏。

*微信开发者工具中运行时,如果出现 “插件未授权使用 添加插件” 的错误提示,请点击“添加插件”按钮, 并且确认是否使用了测试游戏AppID。

CDN 如果未开启 gz/br 压缩,在微信开发者工具的 log 中将有如下提示:

UOS CDN gzip/br 压缩可通过 accept-encoding 控制,微信小游戏已自动添加 “gzip,deflate,br” ,因此无需额外操作。

21.在手机上测试

开发版本: 微信开发者工具上点击 Preview(预览) 生成二维码,扫码后可在手机(同一微信账号)上测试;若他人参与测试,需要申请正式的小游戏AppID,并在微信后台添加测试人员的微信账号。

体验版本: 使用正式的小游戏AppID打包的小游戏,可点击右侧 Upload(上传) 按钮,填写版本号和版本描述,上传体验版本。然后在 微信小游戏后台管理/版本管理/开发版本 中找到上传的版本,将其设置为体验版。该版本后续可用于提审发布。

如果遇到资源下载失败,404的错误。请点开手机右上角三个小点,找到并打开 开发调试->打开调试。或按照步骤20,在微信小游戏后台添加白名单。

22.添加域名白名单

扫码登录微信小程序网页后,前往 开发管理-> 开发设置 -> 服务器域名 , 在 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.cncdp.tuanjie.cn 等域名的请求。 请前往 Windows -> General -> Services 关闭, 并且在 Package Manager 中移除 Analytics 。

下载与安装
小游戏开发