关于 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 HTTPjavascript 下的 WebSocket 实现 + websocket-sharp
,不完整使用 Best HTTP 的原因是我们项目已有自己的网络底层实现,只需要在 WebGL 平台替换相应的网络连接关闭,以及数据的收发即可,所以我进行了剥离,只选取我要的部分进行修改完善。在 C# 端的接口只提供名为 WebSocket 的类,里面处理各个平台即可。

截至以上部分,完整的实现了需要的 WebSocket 网络支持,接下来只需要在 WebGL 平台下替换项目中的网络接口即可。

另外,过程中发现了 5.6.1 的一个 Bug:同时开启 Development BuildUse 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 的探索(二)的更多相关文章

  1. 关于 Unity WebGL 的探索(一)

    到今天为止,项目已经上线一个多月了,目前稳定运行,各种 bug 也是有的.至少得到了苹果的两次推荐和 TapTap 一次首页推荐,也算是结项后第一时间对我们项目的一个肯定. 出于各种各样的可描述和不可 ...

  2. 使用Photon引擎进行unity网络游戏开发(二)——Photon常用类介绍

    使用Photon引擎进行unity网络游戏开发(二)——Photon常用类介绍 Photon PUN Unity 网络游戏开发 Photon常用类介绍: IPunCallback PUNGIPunCa ...

  3. Unity的Json解析<二>–写Json文件

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50378805 作者:car ...

  4. Unity WebGL 窗口自适应

    unity 打包好WebGL后,用文本编辑器编辑打包生成的 index.html 文件 在生成的html里面修改代码     <script type="text/javascript ...

  5. Unity——技能系统(二)

    Unity技能系统(二) Unity技能系统(一) Demo展示: 五.技能管理和释放 1.CharacterSkillSystem 技能系统类,给外部(技能按钮,按键)提供技能释放方法: 技能释放逻 ...

  6. WebGL入门教程(二)-webgl绘制三角形

    前面已经介绍过了webgl,WebGL入门教程(一)-初识webgl(http://www.cnblogs.com/bsman/p/6128447.html),也知道了如何绘制一个点,接下来就用web ...

  7. Unity 依赖注入之二

    1. 构造子注入 1.1 构造子注入初级代码 container.RegisterType<IMyWork, MyWork>(new InjectionConstructor(new Bo ...

  8. Unity WebGL MoonSharp崩溃问题

    当前Unity的代码更新方案基本都选择的ULua,而我们项目还需要考虑Web平台,ULua不支持WebGL,所以决定选择MoonSharp.MoonSharp(http://www.moonsharp ...

  9. Unity 用户手册用户指南二维纹理 (Texture 2D)

    http://www.58player.com/blog-2327-953.html 二维纹理 (Texture 2D) 纹理 (Textures) 使您的 网格 (Meshes).粒子 (Parti ...

随机推荐

  1. 持续集成之Jenkins安装部署

    1.系统环境和安装java环境 [root@devops ~]# cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) 安装java ...

  2. ios应用里面进入app store 下载界面

    转自:http://blog.csdn.net/diyagoanyhacker/article/details/6654838 在IOS应用里直接打开app store 评论页面的方法: [[UIAp ...

  3. Spring理论基础-面向切面编程

    AOP是Aspect-Oriented Programming的缩写,中文翻译是面向切面编程.作为Spring的特征之一,是要好好学习的. 首先面向切面编程这个名称很容易让人想起面向对象编程(OOP) ...

  4. 【洛谷 P4180】【模板】严格次小生成树[BJWC2010](倍增)

    题目链接 题意如题. 这题作为我们KS图论的T4,我直接打了个很暴力的暴力,骗了20分.. 当然,我们KS里的数据范围远不及这题. 这题我debug了整整一个晚上还没debug出来,第二天早上眼前一亮 ...

  5. Metlnfo cms后台getshell漏洞复现

    整体思路 挖掘伪全局变量 然后找可控参数进行利用#伪全局变量:可理解为全局变量,例部分CMS为了全局过滤SQL注入或者XSS之类的漏洞就会将GET.POST.COOKIE等请求借入全局然后直接过滤.这 ...

  6. STM32-内存管理

    转载:http://www.cnblogs.com/guozhikai/p/6031904.html #ifndef __MALLOC_H #define __MALLOC_H #include &q ...

  7. 手把手教你写Linux设备驱动---中断(三)--workqueue实现(基于友善之臂4412开发板) 【转】

    转自:http://blog.csdn.net/morixinguan/article/details/69680909 上节,我们讲到如何来实现tasklet小任务机制 http://blog.cs ...

  8. 需要重刷整個 image 的時機 - 1

    最近遇到一個問題, gpio 讀出來的值與預期不同, 詳細描述如下: 首先手機 download 了一個完整的 daily build image , 接下來 不斷地修改 kernel 部分 code ...

  9. 【bzoj1072】SCOI2007排列

    状压dp,f[i][j]表示当前取了i,模数余j的状态. 然后向后推,枚举可能的数即可. 注意每个数存在重复,最后要除以相应出现次数的阶乘. #include<bits/stdc++.h> ...

  10. 【模板】SPOJ FACT0 大数分解 miller-rabin & pollard-rho

    http://www.spoj.com/problems/FACT0/en/ 给一个小于1e15的数,将他分解. miller-rabin & pollard-rho模板 #include & ...