WebGL关于网页端与U3D互动的传值方法
Posted 游戏蛮牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebGL关于网页端与U3D互动的传值方法相关的知识,希望对你有一定的参考价值。
国内最大的虚拟现实开发者平台
— ID : unitymanual —
测试环境:
系统:Windows7旗舰版SP1
HTTP服务器:Nodejs //可选服务器,浏览器也可直接运行。
U3D版本:.5.0f3
浏览器:火狐51.0.1 (32 位)
语言:c# javascript html
一个DEMO:
http://hecom.in/lab/webgl-chat/
实现方法:
首先发布Webgl,需要下载的支持组件,自动下载。
安装完毕后,即可发布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框架了):
SendMessage是WEBGL的通信方法,其结构为:SendMessage("场景内物体名","挂载脚本内函数名",参数);。
这样就将Input输入的内容传值到,U3D场景内的一个名称为“Button”的游戏物体,挂载的脚本内名为“OnClickText”函数,其参数为Input的值。
如果不写参数,那么会直接执行指定的函数。
Html和JavaScript的教程可以到:http://www.runoob.com/ 菜鸟教程网站获取。
接下来是U3D端的代码:
这样就将abc的值传递到U3D的函数内,并执行函数了。就可以通过WEB端的按钮来控制u3d场景的变化。
但我要做到的是要传递多个参数到U3D,所以这个方法要扩展一下,不假思索我首先尝试了这个:
和这个:
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代码,值的获取对照复制即可)
通过建立分割符来分割不同参数,用连接串将不同参数连接起来。
U3D的接收方法:
U3D的c#函数只能接收一个字符串参数。
通过建立数组,使用自建分隔符str.Split('~'); 来,获取到多个数值。
OK这样,多值传递也可以了,这的确用了我几天的时间,也是非常有乐趣的几天。
蛮牛社区()分享最新的游戏研发和虚拟现实相关技术内容。
以上是关于WebGL关于网页端与U3D互动的传值方法的主要内容,如果未能解决你的问题,请参考以下文章