依据Unity官方最新版本文档(2021.3LTS),关于WebGL的兼容性说明为"Unity WebGL不支持移动设备。它可能适用于高端设备,但当前的设备通常不够强大,并且没有足够的内存来支持Unity WebGL内容。为了让最终用户意识到这一点,当最终用户尝试在移动浏览器上加载 Unity WebGL 应用程序时,Unity WebGL 的默认模板会显示一条警告消息。要从应用程序中删除此警告,请添加您自己的 WebGL 模板。有关如何执行此操作的信息,请参阅添加 WebGL 模板。"
按照官方文档关闭在移动浏览器上加载 Unity WebGL 应用程序时的警告后进行实际测试。
以下测试目前仅使用苹果及安卓系统测试:
项目规模 | 桌面浏览器运行情况 | 移动设备浏览器运行情况 |
---|---|---|
空包项目/仅单模型/极小功能项目 | 全部可运行 | 全部可运行 |
已完成的部分成品项目测试(选择包体大约40-80MB,空包+必须字体包体在25M左右) | 全部可运行 | 目前测试,加载速度慢为通病;安卓系统基本都可加载访问;苹果系统加载完成后重复加载导致网页崩溃。其他如鸿蒙等移动端系统未测试。 |
针对于苹果系统无法正常加载问题,查看Safari Console,并无任何报错及异常提示。
并且测试过程中发现并非是较大的项目会导致网页崩溃,所以项目大小与是否崩溃没有直接关系。
初步定位原因:内存溢出。
使用上图附带代码测试,重新复现之前的问题,触发此循环逻辑后,项目重新加载,进而网页崩溃。
同样逻辑在pc平台无问题。
初步定位原因:内存溢出。
加载结束,进入场景后,在工厂模型内部游览,仅旋转视角浏览过程中,突发网页崩溃,。
同样在桌面浏览器无问题。
初步定位原因:未知,可能是webgl渲染导致崩溃。
加载结束,在视野中生成2-5个工厂模型,直接画布卡死/网页崩溃。
加载结束,在视野外生成2-20+个工厂模型,未出现崩溃及卡死现象。
同样在桌面浏览器无问题。
初步定位原因:未知,可能是webgl渲染导致崩溃。
总体来说,印证了Unity官方文档中所说明的“当前的移动设备通常不够强大,并且没有足够的内存来支持Unity WebGL内容。”。
不仅如此,除了官方提及的内存,渲染能力也与桌面GPU性能相差甚远。
在这样的情况下,可以进行一定程度上简单、轻量的项目开发。
2、3注释:
UnityWebGL并未从一开始就考虑到了浏览器和设备的兼容性问题。与其他Web3d应用程序较为轻量,更容易适应各种设备和网络条件不同。
UnityWebGL的引擎仍然包含许多为其他平台设计的功能和系统,导致空包+中文字体打包后的大小就在25MB,相对于其他web3d引擎来说在移动端的加载时间很慢。这是因为其他web3d引擎通常只包括所需的部分从而减少了文件大小和加载时间。
并且专业的web3d引擎针对新的 Web 技术和浏览器更新进行的迭代更快。
UnityWebGL与其他web3d引擎由于设计哲学和目标市场的不同,它们在移动浏览器的兼容性上可能会有所不同。
以4G/6G内存苹果手机Chrome及Safari浏览器为例,稳定申请总内存400+MB后崩溃,因此移动设备浏览器对于UnityWebGL的内存限制大约是桌面浏览器的1/5。
并且手机浏览器加载47M模型时,同样崩溃,猜测显存超出也会导致网页崩溃;而同样模型在桌面浏览器上无论生成多少个都不会导致网页崩溃,仅帧率降低。
同样仅10M大小的模型,总大小15M的贴图文件,在桌面/手机浏览器分别测试:
经此测试,贴图/UI等图片资源可能因硬件平台不同,导致资源压缩格式不同或压缩失效。相同的贴图/UI资源,在移动浏览器上会比在桌面浏览器中占用更大的内存/显存。
至此,内存/显存的超出都会导致网页崩溃。