Unity踩坑记之Unity5.6发布WebGL与网络端互传数据

Unity支持20多种平台听起来好像很厉害,可是稍微接触了才发现其实有很多大坑。最近因为项目需要接触了WebGL,其中还要连接SQL数据库,原本以为只需要发布为WebGL即可,结果问题很多,问题如下:

1.发布项目时报错(看了一下错误是System.Windows.Form.dll报错,应该是WebGL不支持对Windows的系统属性的调用,如本地IP地址以及windows窗口)

2.打开发布出来的Html格式文件报错(发布出来的Html只是测试文件,只能用火狐浏览器打开,发布到服务器上才能用其他浏览器打开)

3.项目中的文字消失(Webgl不支持使用本地字体也就是Unity默认字体,字体必须包含在Unity项目中)

4.项目无法与数据库连接

前面都是小坑,看一下网上的解决方案就能够解决,倒是最后一个坑花了我很长时间。我查了一下之后才知道,WebGL是无法直接跟本地(服务器)的数据库连接的,需要在Unity中调用html中的JavaScript方法,通过JavaScript跟数据库(服务器)进行数据传输,处理完数据之后再回传给Unity,大致示意图如下

 

 

Unity踩坑记之Unity5.6发布WebGL与网络端互传数据_第1张图片

参考了很多帖子对我帮助很大,有兴趣可以看下:WebGL关于网页端与U3D互动的传值方法

 

知道了如何交互数据,但是问题还是没有解决,其中SendMessage无论如何都无法回传数值,奇怪,明明跟大家用的方法相同,为何会没有效果?无奈之下只能做小DEMO测试问题所在。

用Unity5.5作为测试版本,开始测试Unity与html之间的数值交互。首先创建一个Text,创建一个名为Show脚本挂载在Main Camera上。

Unity踩坑记之Unity5.6发布WebGL与网络端互传数据_第2张图片

打开脚本创建如下代码:

 

using UnityEngine;
using UnityEngine.UI;
public class Show : MonoBehaviour {
      public Text showText;
    void Start()
    {
        //调用外部函数(参数为方法名、参数)
        Application.ExternalCall("SayHello", "Hello World!");
    }
    //获取返回值方法
    public void Receive(string s)
    {
        showText.text = s;
    }
}

 

将Text控件拖到Main Camera上挂载的方法中,接着发布为WebGL。

Unity踩坑记之Unity5.6发布WebGL与网络端互传数据_第3张图片

发布出来之后是1个html+2个文件夹,然后右键用VS打开html文件。

Unity踩坑记之Unity5.6发布WebGL与网络端互传数据_第4张图片

我们往Script中添加如下代码:

 

 

Unity踩坑记之Unity5.6发布WebGL与网络端互传数据_第10张图片

终于运行成功了!不容易,Unity5.6之后的版本可以用这种方法解决。Unity官方针对Unity5.6版本进行API的优化却不说,会让使用者费很大的力去解决一个原本并不难的问题,而且,Unity支持各个平台其实还有很多坑,有些根本无法绕过,例如WebGL,选用之前请先充分考虑是否一定要用Unity开发网页端项目。

还有,在使用新版本之前请查看新版本的更新内容,说不定能帮上你大忙,避免踩到坑,本次就先这样吧,我也是新手,如有不足之处敬请原谅!

 

你可能感兴趣的:(Unity)