关于 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 ...
随机推荐
- Linux系统关闭防火墙端口
1. 打开防火墙端口 # iptables -I INPUT -p tcp --dport -j ACCEPT # iptables -I INPUT -p tcp --dport -j ACCEPT ...
- asyncio结合线程池
#使用多线程:在协程中集成阻塞io import asyncio from concurrent.futures import ThreadPoolExecutor import socket fro ...
- 删除linux上7天前后缀名.sql的文件
#!/bin/bash#delete the file of 7 days agofind /data/mysqlbackup/ -mtime +7 -name "*.sql" - ...
- socket 极值数量
在做Socket 编程时,我们经常会要问,单机最多可以建立多少个 TCP 连接,本文将介绍如何调整系统参数来调整单机的最大TCP连接数. Windows 下单机的TCP连接数有多个参数共同决定,下面一 ...
- Bzoj1822 [JSOI2010]Frozen Nova 冷冻波
Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1933 Solved: 608 Description WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖 ...
- 如何设计一个优雅健壮的Android WebView?(下)
转:如何设计一个优雅健壮的Android WebView?(下) 前言 在上文<如何设计一个优雅健壮的Android WebView?(上)>中,笔者分析了国内WebView的现状,以及在 ...
- bzoj 1006 MCS算法
根据陈丹琪的论文弦图与区间图,求出弦图的完美消除序列之后,反向给每个点染可以染的最小的颜色,这样可以使用最少的颜色染色,染色的方案即为队伍数. 那么我们需要求该图的完美消除序列,使用MCS算法,从后向 ...
- 将资源文件夹中的文件通过流的方式写入到应用的File文件夹中
//1.在Files文件夹中创建同名的数据库文件 File files = getFilesDir(); File file = new File(files, DBName); if(file.ex ...
- Spring cloud 实战读书笔记
基础知识 Spring cloud 版本说明 Brixton.SR5 :Brixton 的第5个Release版本 SRX:service releases 简称SRX版本,X版本号 Spring b ...
- Vue组件-组件的属性
在html中使用元素,会有一些属性,如class,id,还可以绑定事件,自定义组件也是可以的.当在一个组件中,使用了其他自定义组件时,就会利用子组件的属性和事件来和父组件进行数据交流. 比如,子组件需 ...