关于 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. [Luogu 3224] HNOI2012 永无乡

    [Luogu 3224] HNOI2012 永无乡 特别水一个平衡树题. 不认真的代价是调试时间指数增长. 我写的 SBT,因为 Treap 的 rand() 实在写够了. 用并查集维护这些点的关系, ...

  2. CODE FESTIVAL 2017 qual B C - 3 Steps

    Score : 500 points Problem Statement Rng has a connected undirected graph with N vertices. Currently ...

  3. bzoj 1776: [Usaco2010 Hol]cowpol 奶牛政坛——树的直径

    农夫约翰的奶牛住在N (2 <= N <= 200,000)片不同的草地上,标号为1到N.恰好有N-1条单位长度的双向道路,用各种各样的方法连接这些草地.而且从每片草地出发都可以抵达其他所 ...

  4. 【Luogu】P3930 SAC E#1 - 一道大水题 Knight

    [题目]洛谷10月月赛R1 提高组 [题意]给定n*n棋盘和<=16个棋子,给几个棋子种类和攻击范围,现我方只有一马,求能否吃王. [算法]状压+BFS [题解]16种棋子中,马不能吃马,直接处 ...

  5. 【转】IOS版本自定义字体步骤

    本文转载自:http://quick.cocoachina.com/wiki/doku.php?id=ios%E7%89%88%E6%9C%AC%E4%BD%BF%E7%94%A8%E8%87%AA% ...

  6. Solaris 选择使用不同网口的操作

    机器上集成两个物理网口,由于先前使用的网口传输速率特别慢且容易丢包,故换成另一个网口,操作如下: 1.查看物理设备信息-- 显示可用的数据链路 root@238-spa:~# dladm show-p ...

  7. Java线程总结(一)

    首先,先贴上一个简单的线程实例: public class MyThread extends Thread{ @Override public void run(){ try { for (int i ...

  8. javascript中null与undefined的区别

    1.null null是一个对象,表示一个空对象指针,typeof(null)返回object,null参与运算时会转化为0,将对象初始化为null,可以知道变量是否保存了对象的引用 2.undefi ...

  9. 广度优先算法(BFS)与深度优先算法(DFS)

    一.广度优先算法BFS(Breadth First Search) 基本实现思想 (1)顶点v入队列. (2)当队列非空时则继续执行,否则算法结束. (3)出队列取得队头顶点v: (4)查找顶点v的所 ...

  10. 一种通过HTTP传文件出网的姿势

    在外网机器上运行文件服务接收服务 root@kali:~/pentest-script/FileTransfer/HttpServer# python3 SimpleHttpUpload.py Ser ...