官方文档说明
依据Unity官方最新版本文档(2021.3LTS),关于WebGL的兼容性说明为"Unity WebGL不支持移动设备。它可能适用于高端设备,但当前的设备通常不够强大,并且没有足够的内存来支持Unity WebGL内容。为了让最终用户意识到这一点,当最终用户尝试在移动浏览器上加载 Unity WebGL 应用程序时,Unity WebGL 的默认模板会显示一条警告消息。要从应用程序中删除此警告,请添加您自己的 WebGL 模板。有关如何执行此操作的信息,请参阅添加 WebGL 模板。"
按照官方文档关闭在移动浏览器上加载 Unity WebGL 应用程序时的警告后进行实际测试。
测试1
以下测试目前仅使用苹果及安卓系统测试:
项目规模 | 桌面浏览器运行情况 | 移动设备浏览器运行情况 |
---|---|---|
空包项目/仅单模型/极小功能项目 | 全部可运行 | 全部可运行 |
已完成的部分成品项目测试(选择包体大约40-80MB,空包+必须字体包体在25M左右) | 全部可运行 | 目前测试,加载速度慢为通病;安卓系统基本都可加载访问;苹果系统加载完成后重复加载导致网页崩溃。其他如鸿蒙等移动端系统未测试。 |
针对于苹果系统无法正常加载问题,查看Safari Console,并无任何报错及异常提示。
并且测试过程中发现并非是较大的项目会导致网页崩溃,所以项目大小与是否崩溃没有直接关系。
初步定位原因:内存溢出。
测试2
使用上图附带代码测试,重新复现之前的问题,触发此循环逻辑后,项目重新加载,进而网页崩溃。
同样逻辑在pc平台无问题。
初步定位原因:内存溢出。
测试3
加载结束,进入场景后,在工厂模型内部游览,仅旋转视角浏览过程中,突发网页崩溃,。
同样在桌面浏览器无问题。
初步定位原因:未知,可能是webgl渲染导致崩溃。
测试4
加载结束,在视野中生成2-5个工厂模型,直接画布卡死/网页崩溃。
加载结束,在视野外生成2-20+个工厂模型,未出现崩溃及卡死现象。
同样在桌面浏览器无问题。
初步定位原因:未知,可能是webgl渲染导致崩溃。
结论:
总体来说,印证了Unity官方文档中所说明的“当前的移动设备通常不够强大,并且没有足够的内存来支持Unity WebGL内容。”。
不仅如此,除了官方提及的内存,渲染能力也与桌面GPU性能相差甚远。
在这样的情况下,可以进行一定程度上简单、轻量的项目开发。
- 性能差异:WebGL渲染需要GPU资源,而移动设备的GPU可能不如桌面GPU那么强大或者优化。
- 内存溢出:安卓的内存普遍较大,但不同型号的苹果手机内存不同。如,iPhone 12 Pro Max 和 iPhone 13 Pro Max,RAM 已经增加到了 6GB。iPhone 13 Mini 和 iPhone 13 则配备了 4GB 的 RAM。内存泄露一般会在Console进行异常提示,但在测试过程中并未发现有任何相关提示。WebGL 内容在浏览器中运行。浏览器在其内存空间中分配应用程序运行内容所需的内存。 可用内存量因以下因素而异:
a. 使用的设备
b. 使用的操作系统
c. 使用的浏览器,以及是在 32 位还是 64 位处理器上运行
d. 浏览器的 JavaScript 引擎解析代码所需的内存量
e. 浏览器为每个选项卡使用单独进程,但是内容需要与所有其他打开的选项卡共享内存空间 - 网络限制:Unity WebGL 输出包含了引擎的大部分,在移动网络上,下载WebGL应用的数据可能会很慢,这会影响加载时间和用户体验。
- WebGL调试:移动设备环境无法连接到编辑器Profiler进行内存占用诊断,很难在打包后确定具体大内存资源或逻辑。
- 兼容性适配:为了在移动设备上获得最佳的Unity WebGL体验,需要进行大量不同移动设备(鸿蒙等其他系统)及不同浏览器(chrome,Safari及微信、手机内置浏览器等)的测试和优化,包括压缩资源、优化渲染和功能剔除等,以确保可以兼容大部分设备。
2、3注释:
UnityWebGL并未从一开始就考虑到了浏览器和设备的兼容性问题。与其他Web3d应用程序较为轻量,更容易适应各种设备和网络条件不同。
UnityWebGL的引擎仍然包含许多为其他平台设计的功能和系统,导致空包+中文字体打包后的大小就在25MB,相对于其他web3d引擎来说在移动端的加载时间很慢。这是因为其他web3d引擎通常只包括所需的部分从而减少了文件大小和加载时间。
并且专业的web3d引擎针对新的 Web 技术和浏览器更新进行的迭代更快。
UnityWebGL与其他web3d引擎由于设计哲学和目标市场的不同,它们在移动浏览器的兼容性上可能会有所不同。
开发方案
- 建议提前开始使用UnityWebGL进行开发,将基本功能开发完成测试,确保足够的时间进行兼容性适配。
- Unity WebGL转微信小游戏,将产品发布在微信小程序平台,由转换工具与微信小游戏运行环境保证适配兼容,并且转换工具提供高性能模式。但微信小游戏发布需要软著、游戏自身自查报告。(注:转换工具仅可将unityWebGL转换为微信小游戏)
- 使用其他web3d引擎开发。