Unity开发抖音小游戏说明

Unity-Native方案说明

基于web的方案优点是支持android/ios平台,缺点是性能受限,带来的是
  1. 表现力和玩法复杂度受限
  2. 优化和改造的成本比较大
Native方案的定位:提供Native运行的沙盒环境,确保隔离性和安全性,提供和webgl方案相同的平台能力, 不会因为是Native方案而支持任意原生代码的执行 会进行较为严格的代码安全性扫描检查。
所以Native方案并不完全等于 原有项目在android平台构建的APK。对比webgl平台,会有以下限制
  1. 只能使用特定版本的引擎。仅支持使用il2cpp的项目。(不能支持 InstantGame)
  2. 不能包含android平台的代码,如jar,aar等。
  3. 对原生插件有限支持,仅支持有限的开源项目的release版本的so文件实行md5白名单的加载。

方案使用说明

一个基本的Unity工程在android平台的构建物包含的文件有3部分,开发者在上传native方案时,上传工具会将项目生成的gradle工程中的cpp文件和资源文件上传到服务器端。对应关系
原有
现在
unity引擎的lib文件
引擎的so文件会使用服务器统一的版本文件。
引擎基本资源文件和打包在APK中的资源文件。
使用工程本地构建出的除so之外的apk里的资源文件。
游戏项目代码编译生成的il2cpp.so
由服务端,经过代码扫描,通过cpp文件构建出il2cpp.so。

Unity WebGL适配方案概述

一、技术原理

Unity WebGL是什么

WebGL 简介
WebGL(Web Graphics Library)是一种能够将 JavsScript 和 OpenGL ES 结合在一起的一种 3D 绘图标准。能够通过 HTML5 的 Canvas 来和 DOM API 相结合来完成图形渲染,而且不需要安装任何插件就可以在浏览器中运行。
Unity WebGL
Unity 主要利用 WebGL 技术,能够将游戏工程代码和资源内容使用 WebGL 选项构建,构建出可以在浏览器中运行的Web应用程序,这些程序可以使用HTML5、JavaScript以及WebGL技术在网页中进行呈现。
技术概述
要能够在浏览器中运行 WebGL 应用程序,所有代码都需要是浏览器可以支持的标准语言。Unity 使用 Emscripten 编译器工具链将 Unity 引擎导出的代码(用 C 和 C++ 编写)编译成 WebAssembly(wasm),并结合 JavaScript 代码来执行。
对于一个基于 Unity 引擎编写的游戏工程,游戏代码(C# 脚本)最终会被编译为 DLL 文件,Unity 利用其 IL2CPP 技术,将 DLL 文件转换为 C++ 源文件,然后使用 Emscripten 编译工具链将 C++ 代码编译并转换为 wasm 文件,转换得到的 wasm 代码文件能够直接在浏览器中执行。
技术限制
并非所有Unity功能都可用于WebGL方案,主要是由于一些技术的限制:
  • 不支持多线程:由于JavaScript中缺少线程支持,因此不支持线程。在 Unity 内部使用线程来加速性能以及在脚本代码和托管的 dll 中使用线程都是不受支持的。实质上不支持 System.Threading 命名空间中的任何内容。
  • 无法断点调试:无法在 Visual Studio 等IDE中直接调试运行 WebGL 应用程序。
  • WebGL 图形 API 等效于 OpenGL ES 2.0 和 3.0,存在一些限制。请参阅: WebGL 图形
平台适配
为了能够让导出包在字节系APP下运行,并使用平台能力,我们提供了以下支持:
  • 开发阶段:提供平台能力的StarkSDK(C#)接口,帮助开发者快速对接平台能力;
  • 构建阶段:提供StarkSDK Unity Tool构建工具,一键构建 WebGL应用程序、并进行 JS 胶水层代码配;提供游戏打包和发布工具;
  • 调试阶段:提供本地调试工具,在真机进行调试;
  • 运行阶段,提供wasm运行能力,图像渲染能力,以及提供JS接口支持与底层宿主的交互。
业务逻辑与架构
运行环境
  • Android下基于v8引擎及内部渲染引擎;
  • iOS下基于WKWebView运行环境,即跟微信一样的 高性能模式运行;
  • 两种系统环境下,wasm 执行都是 JIT 代码。但由于底层虚拟机差异过大以及自身不断迭代,难以横向对比。

3.抖音小游戏Unity WebGL启动流程与时序

启动加载时序

Unity WebGL拉起流程如下图所示:

拉起Unity游戏流程

流程图
关键步骤
  1. 检查基础库是否需要更新
  2. 在开放平台加载页面下载游戏首包,包含游戏wasm代码、资源以及胶水代码
  3. 进入Unity加载页面,检查资源是否完整
  4. 如果采用wasm分包,会检查是否包含wasm子包
  5. 对wasm代码进行解压、编译、实例化
  6. 完成上述准备后,等待wasm main函数被调用,进入Unity运行阶段
引用网址:
https://bytedance.larkoffice.com/drive/folder/DuMifDEUSlzEjKdBBwgcfOHhncf
### 使用 Unity 开发小游戏教程 #### 初始化项目配置 为了使Unity项目能够适配小游戏环境,需先完成基础配置工作。这包括但不限于创建新的Unity工程并调整其构建目标至适合WebGL或特定于小游戏的设定。由于小游戏运行在其特有的环境中,因此部分标准API可能无法直接使用。 #### 广告ID申请流程 对于希望集成广告服务的游戏而言,在开发前应按照官方指南完成广告ID的申请过程[^2]。此步骤确保后续可以合法地调用相关接口来展示广告内容给玩家,并借此获得收益分成的机会。 #### 文件存储机制概述 考虑到小游戏的独特性质——即它们是在宿主应用内执行而非独立安装的应用程序——所以传统意义上的持久化方案并不适用于此场景下。针对这种情况设计了一套专门用于处理这类轻量级应用程序的数据保存策略[^1]。具体来说就是利用浏览器缓存或是更高级别的KeyValue形式来进行简单信息记录;而对于较为复杂的需求,则可能会涉及到云端同步服务的支持。 #### SDK初始化示例代码 当准备就绪之后就可以着手编写实际逻辑了。下面给出一段关于如何初始化字节跳动提供的广告SDK的例子: ```csharp using UnityEngine; public class AdInitializer : MonoBehaviour { void Start() { // 创建用户配置对象实例 var userConfig = new ABUUserConfig(); // 启用日志功能以便调试期间查看输出 userConfig.logEnable = true; // 调用setupMSDK函数完成初始化操作 ABUAdSDK.setupMSDK(ABUAdPositionId.APP_ID, "msdk demo", userConfig); } } ``` 这段脚本展示了怎样通过`ABUUserConfig`类设置必要的参数选项,并最终触发`ABUAdSDK.setupMSDK()`方法启动整个框架的工作状态[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丛小胖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值