最近学车一个月了,每周放假顶着大太阳在驾校排车练车,所以也没怎么搞学习了,天天练车排队的时候拿个手机在那刷着玩。
最近偶尔逛下qq群聊,在部分unity开发群经常听到一股声音:unity怎么还不支持手机小程序?还不能支持微信运行?tinymode啥时候出来啊?
其实unity的webgl很早就支持手机端运行了,只是unity官方觉得webgl版本在手机上性能和易用性并不好,所以一直屏蔽webgl在手机端运行而已,对于这种屏蔽我们随意修改一个函数即可,毕竟webgl本身就是跨平台的。
首先我们做一个unity小demo,使用默认webgl打包如下:
丢到服务器上并且配置一个url访问: webgltest
我们用手机浏览器和微信打开测试如下:
请注意中间这行字:
翻译:请注意unity webgl当前不支持手机端,如果你想继续运行则点击OK按钮
我们直接用个文本编辑工具依次打开webgl目录下所有能打开的文本文件,Ctrl+F查找这句话,就可以在UnityLoader.js中找到相应函数,如下:
我们可以得知这个函数就是兼容性测试(compatibilityCheck),而这几个三目运算的意义也就是如果是mobile则popup一个确认OK继续的弹窗,如果你的浏览器不是edge/firefox/chrome/safari之一则popu一个确认OK继续的弹窗,否则提示你的浏览器不支持webgl。
我们就不管三七二十一,直接函数返回callback的t();即可,修改如下:
代表我们的兼容性检测始终通过,然后修改html中style样式,让页面全屏显示,如下:
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>unity手机webgl修改</title>
<link rel="shortcut icon" href="TemplateData/favicon.ico">
<link rel="stylesheet" href="TemplateData/style.css">
<script src="TemplateData/UnityProgress.js"></script>
<script src="Build/UnityLoader.js"></script>
<script>
var gameInstance = UnityLoader.instantiate("gameContainer", "Build/testold1.json", {onProgress: UnityProgress});
</script>
</head>
<style>
*{
margin: 0;
padding: 0;
}
div{
width:100%;
height: 100%;
background: black;
position: absolute;
}
</style>
<body>
<div class="webgl-content">
<div id="gameContainer"></div>
<div class="footer">
<div class="webgl-logo"></div>
<div class="fullscreen" onclick="gameInstance.SetFullscreen(1)"></div>
<div class="title">unity-webgl-phone</div>
</div>
</div>
</body>
</html>
然后再次配置一个url访问:unity webgl 修改
再次使用微信访问:
即可打开demo,不过我感觉的出来webgl运行在微信中性能不够,我估计仅仅满足我们做一点模型三维展示吧,也就是俗话说的“又不是不能用!”。
当然你们也可以复制链接到微信中测试一下,我的手机用了四年了有点老旧,芯片性能和内存容量都太次了,我平时也就用手机刷个头条知乎什么的。
最后谈一谈unity为什么始终没有针对手机浏览器小程序等运行模式做一个优化或者独立的开发模块?
我感觉一方面unity的代码也迭代这么多年了,为了保证全平台通用性,各种平台模块、渲染模块、函数API等耦合太严重,哪怕最好的程序构架设计也禁不住unity几乎全平台运行的宏大发展方向。而手机浏览器或小程序运行又是一个限制十分大的环境(特别是处理速度和内存方面),unity就算是strip engine code也无法完全裁剪到最精炼的webgl API集合,所以在手机webgl上面临内存占用过大(相对浏览器等内存限制)运行速度也不尽人意。所以unity如果想要完善手机webgl的开发方向,必须重新开辟一个新的开发模块,tinymode就是这个所谓"新的开发模块",但是如果各位关注过tinymode就会发现,tinymode迭代太慢了,至今都没有一个正式版本出台,这是为什么呢?我猜测一方面重新整合构架设计和tiny模块复杂度还是很高的,而更重要的一方面就是我感觉unity这家公司是有自己的远大目标的,而这个“远大目标”我猜测肯定是向着3A开发的方向,也就是指向UE4(5)引擎的方向,从unity推出高清渲染管线和shadergraph就看得出来,所以这些也是unity在手机webgl小程序方面没怎么上心的原因。