WebGL关于网页端与U3D互动的传值方法

Posted 游戏蛮牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebGL关于网页端与U3D互动的传值方法相关的知识,希望对你有一定的参考价值。

  

国内最大的虚拟现实开发者平台

  — ID : unitymanual —  

WebGL关于网页端与U3D互动的传值方法


WebGL关于网页端与U3D互动的传值方法


测试环境:

系统:Windows7旗舰版SP1

HTTP服务器:Nodejs //可选服务器,浏览器也可直接运行。

U3D版本:.5.0f3

浏览器:火狐51.0.1 (32 位)

语言:c# javascript html

一个DEMO:

http://hecom.in/lab/webgl-chat/


实现方法:

首先发布Webgl,需要下载的支持组件,自动下载。

WebGL关于网页端与U3D互动的传值方法

安装完毕后,即可发布WebGL版本了。

我第一次发布的时候遇到了错误,没有查询到有用的资料,后来翻墙谷歌也无果。无奈,就将所有脚本剪切出项目,排除脚本问题,发现可以发布,于是再将脚本分批导入,排查。发现在原项目中使用了Forms控件,应该是Windows控件造成的。using  System.Windows.Forms;//控件本身没有问题,注释相关函数即可生成WebGL。


这是遇到第一个问题,原因应该是U3D的WebGL不支持Forms控件,想想也对。


发布是很简单的,但原项目mysql不能读取,国内无法获取到有用的信息,翻墙谷歌查找资料,发现WEBGL不支持直连数据库,这耗费了我一天的时间。


查找资料的结果是要通过WEB端获取数据库的值,传值给U3D执行。


大致的流程是 Mysql->Web->Javascript-> 。

通过翻墙谷歌找到一个日本开发者的博客,非常详实的介绍了WebGL

http://tips.hecomi.com/entry/2014/12/08/002719


解决的办法:

这是WEB端的代码,通过JavaScript传值给U3D。

在U3D生成的index.html复制一份,改个名字,这样新生成的就不会覆盖修改后的了。

WEB端代码(基本是最小WEBGL框架了):

WebGL关于网页端与U3D互动的传值方法

WebGL关于网页端与U3D互动的传值方法

 SendMessage是WEBGL的通信方法,其结构为:SendMessage("场景内物体名","挂载脚本内函数名",参数);。


这样就将Input输入的内容传值到,U3D场景内的一个名称为“Button”的游戏物体,挂载的脚本内名为“OnClickText”函数,其参数为Input的值。

如果不写参数,那么会直接执行指定的函数。


Html和JavaScript的教程可以到:http://www.runoob.com/ 菜鸟教程网站获取。


接下来是U3D端的代码:

WebGL关于网页端与U3D互动的传值方法

这样就将abc的值传递到U3D的函数内,并执行函数了。就可以通过WEB端的按钮来控制u3d场景的变化。


但我要做到的是要传递多个参数到U3D,所以这个方法要扩展一下,不假思索我首先尝试了这个:

WebGL关于网页端与U3D互动的传值方法和这个:

WebGL关于网页端与U3D互动的传值方法

U3D:

WebGL关于网页端与U3D互动的传值方法

提示如下错误:

Failed to call function OnClickText of class TestClickShell Calling function OnClickText With1 parameter but the function requires 2.

函数需要2个参数,只传递了一个参数,错误;

又试了好多方法,都不行。

如果成功就见鬼了,所以我没搞清原理,就想当然了,于是翻山越岭找到一篇美帝的博客:http://www.feedingedge.co.uk/blog/2011/03/09/browser-to-unity3d-communication-and-back-again/

文章说,U3D只接受一个字符串(我试了Int也行),但只接收一个。

该博文还介绍了如何用分隔符来获取多个数值,找到宝藏了,于是修改为:

Javascript的传值方法:(替换HTML内的js代码,值的获取对照复制即可)

WebGL关于网页端与U3D互动的传值方法

通过建立分割符来分割不同参数,用连接串将不同参数连接起来。

U3D的接收方法:

U3D的c#函数只能接收一个字符串参数。

通过建立数组,使用自建分隔符str.Split('~'); 来,获取到多个数值。

WebGL关于网页端与U3D互动的传值方法

OK这样,多值传递也可以了,这的确用了我几天的时间,也是非常有乐趣的几天。


蛮牛社区()分享最新的游戏研发和虚拟现实相关技术内容。


以上是关于WebGL关于网页端与U3D互动的传值方法的主要内容,如果未能解决你的问题,请参考以下文章

虚拟互动WebGL平台的应用前景和导出方法

U3D发布WEBGL报错,用的是火狐打开

关于fragment的传值问题

关于c# 页面跳转之间的传值总结(摘抄)

关于c# 页面跳转之间的传值总结(摘抄)

html5中啥方法是用于网页传参的