Unity-WebGL
平台限制
- 不支持多线程,因为 JavaScript 不支持多线程,所以
System.Threading命名空间下的类不要使用; - 不能在 VS 中进行断点调试,后面会介绍如何进行调试;
- 不能直接使用 Socket,包括
System.Net下的任何类型,以及System.Net.Sockets下的部分类型,以及UnityEngine.Network,如果需要在 WebGL 平台使用网络功能,可以使用WWW或者UnityWebRequest这些都是基于Http协议的实现,如要需要高实时性,可以选择WebSockets或者WebRTC; - WebGL 1.0是基于 OpenGL ES 2.0,WebGL 2.0基于 OpenGL ES 3.0,所以存在相应的限制;
- WebGL 音频是基于自定义的后台,只具备基本的音频功能;
- WebGL 是 AOT(ahead of time,即静态编译平台,因此不能使用
System.Reflection.Emit下的类型进行代码生成,IL2CPP和 iOS 也是如此。
打包
文件内容过大
网上找了一些技巧,待测试:
空场景能控制在10MB以下(压缩后)
需要注意:
player setting里选上micro mscorlib
发布时编译选项里去掉development build,选择fastest(slow builds)
资源要小,不要重复引用资源
选择恰当的资源压缩方式
发布后配置好http服务器,将release资源重定向到compressed 目录,注意要让浏览器能使用cache
看我这个demo,简单的打飞机游戏,总资源不超过20MB(压缩后)
(To be read)如何优化unity WebGL工程,从230MB降低到3.7MB
打包后的效果不美观,需要修改js或者css
怎么用Unity打包个WEBGL程序这么麻烦,又得改样式,又得改网页——教你使用WEBGL模板,提高效率 - 腾讯云开发者社区-腾讯云
Unity3D已经为我们思考到了这一点,提供了一个叫做自定义Templates模板的功能,会为我们在每次生成的时候设置好模板。
Unity与Web协作
参考文章:
在vue中使用unity3D实现webGL将要呈现的效果_普通网友的博客-CSDN博客_unity3d webgl
UnityLoader.js
核心API:
1 | |
objectName是场景中的对象名称;methodName 是当前附加到该对象的脚本中的方法名称;value 可以是字符串、数字,也可为空。
Unity与Vue
有一个GitHub - votetake/vue-unity-webgl: Unity 3d Component for VueJS
但是已经2年没更新了。
通过一个JSON文件进行交互。
代码很少,主要是基于UnityLoader.js套了一层,这个js应该才是核心功能的实现。
Unity与React
https://react-unity-webgl.dev/
冯啸反馈的问题
1、UnityLoader会因为闭包,内存不释放
2、内存占用很大,移动端1G以上
虚拟人这边的信息:
1、Unity大约有4-7个人,都是做虚拟人的,不是做展厅的
2、展厅是顾佳做,用的是Babylon.js
3、有个TA,是U3D的
4、现在也是Unity转WebGL的方式,不用Babylon是因为视觉渲染效果太差了
常见问题
手机浏览器上无法正常运行WebGL程序
手机浏览器运行Unity WebGL方法:将UnityLoader.js中的
UnityLoader.SystemInfo.mobile和["Edge", "Firefox", "Chrome", "Safari"].indexOf(UnityLoader.SystemInfo.browser) == -1替换成false。
参考资料
(精)Unity WebGL 开发指北(完全篇)这一个文章就够了:
https://zhuanlan.zhihu.com/p/475307249
Unity项目去除unity开始动画和发布设置
https://gameinstitute.qq.com/community/detail/129178
Unity(WebGL)与JS通讯2022最新姿势:
https://zhuanlan.zhihu.com/p/372323716
(精)这个人做Unity+WebGL的: