当前位置:   article > 正文

Unity3D开发之unity和js通信交互_unity2020 js向unity发送信息不同版本

unity2020 js向unity发送信息不同版本

一.老版方法

unity发布webplayer平台后会输出html和unity3d文件。我们的程序主要被打包在unity3d文件里,而html则是网页的界面显示。

1.Unity发送消息给JS

unity想要和js交互,提供了一个函数:Application.ExternalCall();此函数仅限于webplayer平台下。我们编辑发布的html文件,在里面加入我们的js脚本如下:

  1. function GetID(id)
  2. {
  3. alert("传入id:"+id);
  4. }

在unity里我们在start函数里调用

Application.ExternalCall("GetID","吴彦祖");

使用浏览器打开html文件,就会出现如下弹窗:

2.JS发送消息给unity

我们在刚才的js函数里添加一句代码:

  1. function GetID(id)
  2. {
  3. alert("传入id:"+id);
  4. //发送消息给unity 第一个参数:挂在脚本的物体 第二个参数:unity被调用的函数 第三个参数:函数传入的参数
  5. u.getUnity().SendMessage("Main Camera","GetIDInfo","JayW")
  6. }

在unity里创建一个函数用来接收处理:

  1. public void GetIDInfo(string id)
  2. {
  3. text.text = id;
  4. }

运行效果如下:

二.新版方法

最近在使用webgl方面,2018.2.9版本弃用了Application.ExternalCall方法。选择添加一个jslb文件作为中间层。我们搜官方文档可以看到使用方式如下:

首先创建一个文本,文件格式保持为.jslib。然后我们在里面增加我们要接受c#传来的数据和js要调用的函数。代码如下:

  1. mergeInto(LibraryManager.library, {
  2. JSLog: function (str) {
  3. var strs=Pointer_stringify(str);
  4. Log(strs);
  5. },
  6. });

注意:这里一定要用unity内置函数Pointer_stringify将传进来的str转换成字符串。如果不转换str存储的是inptr数据的内存地址位。传到js就是一堆数字。最后保存文件,将文件放到unity工程下的Plugins文件夹内。

然后在c#代码块里,我们加上我们要调用的方法:

  1. [DllImport("__Internal")]
  2. private static extern void JSLog(string str);//此处传入的类型和调用时候传入的数据类型一定要一致
  3. void Start()
  4. {
  5. JSLog("卧槽你大爷");
  6. }

最后使我们打包出来的html文件里,在scrip块内加入被调用函数:

  1. function Log(str)
  2. {
  3. console.log(str);;
  4. gameInstance.SendMessage('Main Camera','GetStr',String(str));
  5. }

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/602096
推荐阅读
相关标签
  

闽ICP备14008679号