Unity发布WebGL爬坑杂记(五)

Unity发布WebGL必然会与Web端有通信,也就意味着要与js脚本有互相调用,这方面Unity官方文档中有相关资料https://docs.unity3d.com/2018.3/Documentation/Manual/webgl-interactingwithbrowserscripting.html

与浏览器之间的通信分两部分,一是Unity脚本调用js脚本函数,二是js脚本调用Unity脚本函数。

在准备通信之前要将js源添加在Unity项目中,然后再从脚本调用js函数,换句话讲就是在Unity项目中声明一个表示js脚本的.jslib的文件,然后在脚本中调用。

.jslib

mergeInto(LibraryManager.library,

{
    Hello:function()
    {
    window.alert("Hello,world!");
    },

    AddNumbers:function(x,y)
    {
    return x+y ;
    },

});

详细解析一下这个.jslib文件,首先mergeInto是固定的,官方文档中没有详细介绍,这里我的理解这个是合并函数,表示将js函数与库合并以备后续调用。Hello是在Unity中声明,在这里实现的一个函数名,将其引入 { }里放相关操作,多个函数的话使用就用,分割,另外 在这里解析string类型的值时要使用Pointer_stringify(str)解析为Unity可使用的string类型值。

Unity调用JS脚本

[DllImport("__Internal")]
private static extern void Hello();
[DllImport("__Internal")]
private static extern int AddNumber(int x, int y);

void Start(){
    Hello();
    AddNumber(10,20);
}

首先引用库__Internal,这个是两个下划线,函数名要和之前的.jslib命名一致,然后就是正常的函数调用了,这里有个extern关键字  之前有做过对外通信的应该都知道这个关键字  就是为了声明一个在外部实现的方法,表示这个方法定义在这里,实现在外部,使用这个关键字的函数必须要声明为静态static的,其他没什么好说的了,更详细的传值以及值转换在官方的文档中有详细介绍。

JS调用Unity脚本

SendMessage("GameObjectName","FunctionName",value);

很简单就是这个  SendMessage函数  三个参数,第一个表示挂载目标脚本的物体名称,第二个表示要调用的函数,第三个表示传值,这里传值只能传一个  传多个的话就八仙过海各显神通了,用json什么的都OK的 。

最后官方还有个Unity 调用C的方法,可以去官网看看。

Over!

你可能感兴趣的:(WebGL开发)