关于 Unity WebGL 的探索(二)
关于 Unity WebGL 的探索(二)
上一篇博客记录了关于 WebGL 移植的第一步:部分 C/C++ 插件的编译,目前项目中的部分插件使用该方法通过,接下来比较大的一部分工作量是网络模块 WebSocket 的网络层实现。
WebSocket.org 网站提供了最近本的 WebSocket 的使用示例,其标准规范定义以及相关的的 API 文档都比较全,同时支持安全的 wss 协议。
目前主流的浏览器都支持 WebSocket,可以在这里 WebSocket.org 测试你的浏览器是否支持。
所有的定义和接口都是基于 javascript 的,所以在 Unity 中使用需要创建一份 javascript 的实现,这里可以先参考 Unity 的官方示例:Simple Web Sockets for Unity WebGL。它完整的实现了链接的建立,关闭,消息的收发,但是作为简单的 Demo,健壮性和扩展性肯定是不足的,这里我建议购买使用 Best HTTP,其完整的包装了 WebSocket,在上层提供了统一简单的接口,扩展性也很好,健壮性也不错,基本涵盖了所有的事件到 C# 端处理。不过需要注意的是,默认的消息数据类型是 arrayBuffer,没有处理 binary,如果需要的话自己去扩展下,这部分在 Simple Web Sockets for Unity WebGL 可以找到参考,或者阅读下 API 文档。
这部分都是基于 Build WebGL 平台的实现,如果想在编辑器下,那么必须有在 C# 端实现的 WebSocket 协议,Best HTTP 自己实现了 C# 端的协议支持,不过你也可以使用 websocket-sharp,Unity 的 Demo 也使用了这个。
至于如何创建插件以上的示例都有,不赘述。我后来选定的方案是,使用 Best HTTP 的 javascript 下的 WebSocket 实现 + websocket-sharp
,不完整使用 Best HTTP 的原因是我们项目已有自己的网络底层实现,只需要在 WebGL 平台替换相应的网络连接关闭,以及数据的收发即可,所以我进行了剥离,只选取我要的部分进行修改完善。在 C# 端的接口只提供名为 WebSocket 的类,里面处理各个平台即可。
截至以上部分,完整的实现了需要的 WebSocket 网络支持,接下来只需要在 WebGL 平台下替换项目中的网络接口即可。
另外,过程中发现了 5.6.1 的一个 Bug:同时开启 Development Build 和 Use pre-built Engine 构建出的 WebGL 应用无法正确执行 javascript 插件代码,会出现类似如下的错误:
"An error occured running the Unity content on this page. See your browser JavaScript console for more info. The error was:
ReferenceError: webSocketInstances is not defined"
目前已经给官方提交了 Bug 并得到确认,如果使用的话请注意。
当尝试完这部分工作后,又得到一个重磅消息:处于某种原因,项目 WebGL 版本移植工作暂停,恢复时间待定。
想说啥来着,一开始不想做可又不得不做,刚有点眉目又不用做了,生活中这种事情其实还不少,只要不要太入戏即可。在写这篇博客时该工作已经结束了快有一个月了。
关于 Unity WebGL 的探索(二)的更多相关文章
- 关于 Unity WebGL 的探索(一)
到今天为止,项目已经上线一个多月了,目前稳定运行,各种 bug 也是有的.至少得到了苹果的两次推荐和 TapTap 一次首页推荐,也算是结项后第一时间对我们项目的一个肯定. 出于各种各样的可描述和不可 ...
- 使用Photon引擎进行unity网络游戏开发(二)——Photon常用类介绍
使用Photon引擎进行unity网络游戏开发(二)——Photon常用类介绍 Photon PUN Unity 网络游戏开发 Photon常用类介绍: IPunCallback PUNGIPunCa ...
- Unity的Json解析<二>–写Json文件
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50378805 作者:car ...
- Unity WebGL 窗口自适应
unity 打包好WebGL后,用文本编辑器编辑打包生成的 index.html 文件 在生成的html里面修改代码 <script type="text/javascript ...
- Unity——技能系统(二)
Unity技能系统(二) Unity技能系统(一) Demo展示: 五.技能管理和释放 1.CharacterSkillSystem 技能系统类,给外部(技能按钮,按键)提供技能释放方法: 技能释放逻 ...
- WebGL入门教程(二)-webgl绘制三角形
前面已经介绍过了webgl,WebGL入门教程(一)-初识webgl(http://www.cnblogs.com/bsman/p/6128447.html),也知道了如何绘制一个点,接下来就用web ...
- Unity 依赖注入之二
1. 构造子注入 1.1 构造子注入初级代码 container.RegisterType<IMyWork, MyWork>(new InjectionConstructor(new Bo ...
- Unity WebGL MoonSharp崩溃问题
当前Unity的代码更新方案基本都选择的ULua,而我们项目还需要考虑Web平台,ULua不支持WebGL,所以决定选择MoonSharp.MoonSharp(http://www.moonsharp ...
- Unity 用户手册用户指南二维纹理 (Texture 2D)
http://www.58player.com/blog-2327-953.html 二维纹理 (Texture 2D) 纹理 (Textures) 使您的 网格 (Meshes).粒子 (Parti ...
随机推荐
- jenkins slave agent 当作服务运行
1. 接上边编辑好文件 2. 双击以上的jnlp文件 3. 点击弹出的窗口File->save as service, 此时如果报错的话很可能是由于没有安装.net(.net2 以上) 4. 保 ...
- leaflet一个前端gis框架,比openlayer更简单
leaflet一个前端gis框架,比openlayer更简单 作者github:https://github.com/mourner?tab=overview&from=2009-12-01& ...
- Different Integers(牛客多校第一场+莫队做法)
题目链接:https://www.nowcoder.com/acm/contest/139/J 题目: 题意:给你n个数,q次查询,对于每次查询得l,r,求1~l和r~n元素得种类. 莫队思路:1.将 ...
- zabbix的命令执行
1.对于低版本的可用下列exp直接打到用户 http://119.29.48.232/zabbix/httpmon.php?applications=2 and (select 1 from (sel ...
- Billboard HDU 2795 (线段树)
题目链接 Problem Description At the entrance to the university, there is a huge rectangular billboard of ...
- bzoj 1912 tree_dp
这道题我们加一条路可以减少的代价为这条路两端点到lca的路径的长度,相当于一条链,那么如果加了两条链的话,这两条链重复的部分还是要走两遍,反而对答案没有了贡献(其实这个可以由任意两条链都可以看成两条不 ...
- 查看服务器是否被DDOS攻击的方法
伴随着现代互联网络快速发展,更加容易出现被攻击.尤其是ddos攻击已经不在是大网站需要关心的事情了.不少中小型企业,也在遭受ddos攻击.站长对ddos攻击不了解,所以网站被ddos攻击的时候,都不会 ...
- python—RE正则表达式
re正则表达式 正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C 编写的 ...
- 日常开发技巧:使用notify-send发送通知
背景 在终端执行一些需要较长时间的命令时,会切换到别的界面.但为了知道是否执行完成,需要时不时地切换过去看一眼.很麻烦. 解决方式 为了减少这种麻烦,可以使用notify-send,发送桌面通知.no ...
- 利用eclipse调试ofbiz之debug使用
1.项目右键-配置debug 2.new一个debug调试 3.配置运行类org.ofbiz.base.start.Start 4.设置内存大小:arguments-VM arguments -Xms ...