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以下(压缩后)

需要注意:

  1. player setting里选上micro mscorlib

  2. 发布时编译选项里去掉development build,选择fastest(slow builds)

  3. 资源要小,不要重复引用资源

  4. 选择恰当的资源压缩方式

  5. 发布后配置好http服务器,将release资源重定向到compressed 目录,注意要让浏览器能使用cache

看我这个demo,简单的打飞机游戏,总资源不超过20MB(压缩后)

(To be read)如何优化unity WebGL工程,从230MB降低到3.7MB

打包后的效果不美观,需要修改js或者css

怎么用Unity打包个WEBGL程序这么麻烦,又得改样式,又得改网页——教你使用WEBGL模板,提高效率 - 腾讯云开发者社区-腾讯云

Unity3D已经为我们思考到了这一点,提供了一个叫做自定义Templates模板的功能,会为我们在每次生成的时候设置好模板。

Unity与Web协作

参考文章:

WebGL:与浏览器脚本交互 - Unity 手册

在vue中使用unity3D实现webGL将要呈现的效果_普通网友的博客-CSDN博客_unity3d webgl

UnityLoader.js

核心API:

1
2
3
var unityInstance = UnityLoader.instantiate("unityContainer", "Build/build.json", {onProgress: UnityProgress})

unityInstance.SendMessage(objectName, methodName, value)

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的:

大牛啊12投稿视频-大牛啊12视频分享-哔哩哔哩视频

UnityWebGl项目总结(未完)__一只小QQ的博客-CSDN博客