UnityWebGl与Web前端Html通信,互通消息

官方手册——WebGL:与浏览器脚本交互:https://docs.unity3d.com/cn/current/Manual/webgl-interactingwithbrowserscripting.html

Unity发送消息到Web前端

1.创建.jslib文件

需要放到Unity的Plugins文件夹下。名字随意。

例如: Test.jslib

mergeInto(LibraryManager.library, {

  Hello: function () {
    TestSend("Hello, world!");
  },
});

Hello名字在unity中使用,TestSend名字在Web中使用。

注意1:mac系统中编码问题,创建文件,改后缀之后,需用vs打开确认内容是否正确

注意2:定义jslib的function内方法时不可以使用SendMessage名字,不然会在web端调用异常。

2.创建关联脚本

//声明和jslib文件关联的Hello()方法
[DllImport("__Internal")]
private static extern void Hello();

void Start()
{
    //调用测试,在unity脚本任意地方,调用hello方法都可以。
    Hello();
}

3.打包,并修改index.html测试

在html代码的中添加如下代码:
function TestSend(s)
{
alert(s);
}

<script>
      var gameInstance = UnityLoader.instantiate("gameContainer", "Build/XXXXX.json", {onProgress: UnityProgress});
   function TestSend(s)
   {
       alert(s);  
   }
    </script>

方法名TestSend与.jslib文件function内方法名相同,参数数量相同。

打开更改后的网页,即可发现进入场景后,执行了Start()中的Hellow方法,从而调用了web中新定义的TestSend()方法。弹出alert对话框。

5.如需传递字符串,jslib代码:

mergeInto(LibraryManager.library, {

  Hello: function (str) {
    TestSend(Pointer_stringify(str));
  },
});

传递其他数据结构,请查看上方官方手册。

Web前端调用Unity方法

1.在Unity脚本中创建public方法

public void GetFromWeb(string str)
    {
        Debug.Log(str);
    }

并将脚本挂在到场景中。

2.修改打包后的index.html文件

使用gameInstance.SendMessage(“GameObject”,“GetFromWeb”,s);调用unity内方法。

SendMessage中第一个参数为挂在1中脚本的物体名称,第二个参数为方法名称,第三个参数是对应的方法参数。

为方便测试,将调用脚本写在unity向web发送消息时用的脚本里。

function TestSend(s)
   {
       alert(s);
       gameInstance.SendMessage("GameObject","GetFromWeb",s);
   }

写在普通的js方法里,通过html调用也是一样的,不过这就交给前段同学吧。

3.测试

一开始和第一部分一样,打开webgl网页,执行了unity的Start()中的Hello方法,从而调用了web中定义的TestSend()方法:1.alert(s); 弹出写着参数s的alert对话框。然后执行 2. gameInstance.SendMessage("GameObject","GetFromWeb",s);调用unity场景中名为GameObject物体上脚本里的GetFromWeb()方法,并将参数s传入。 按F12打开控制台,即可看见输出的参数s。

脚本代码(可直接使用),包含测试Demo:https://download.csdn.net/download/boyZhenGui/15577370

谢谢阅读,如果对你有帮助可以给我点个赞,或者加个收藏,方便以后查看

  • 12
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论
Unity是一款强大的跨平台游戏引擎,而Unity WebGL则是Unity的一个特性,它可以将Unity制作的游戏以Web方式发布。 在Unity中,我们可以借助WebGL技术来获取Web信息。具体而言,可以通过以下几种方式来实现: 1. HttpRequest:Unity中提供了HttpRequest类来进行网络请求。我们可以使用它来发送请求并获取Web服务器返回的数据。例如,我们可以通过发送GET请求来获取特定URL的内容,或者发送POST请求将一些数据发送给Web服务器。 2. WebSocket:Unity中也提供了WebSocket类,它可以与Web服务器进行全双工的通信。我们可以通过WebSocket与Web服务器建立连接,并通过发送和接收消息来获取Web信息。WebSocket可以实时获取服务器的更新数据,并将其用于游戏中的相关逻辑。 3. WebAPI:Unity中还提供了WebGL的部分WebAPI,我们可以使用这些API来获取一些浏览器相关的信息。比如,可以获取浏览器版本、屏幕分辨率、设备类型等信息。这些信息可以有助于游戏的适配和优化。 在使用Unity WebGL获取Web信息时,需要注意以下几点: 1. 安全性:由于WebGL涉及与Web服务器的通信,因此需要保证通信过程的安全性。可以通过使用加密通信、验证服务器证书等方法来确保数据的安全传输。 2. 跨域问题:由于浏览器的安全策略限制,WebGL无法直接访问其他域下的资源。因此,如果需要跨域获取Web信息,需要服务器进行一定的配置来支持跨域访问。 综上所述,Unity WebGL可以通过HttpRequest、WebSocket等方式获取Web信息,同时还可以使用WebAPI来获取浏览器相关的信息。在使用时,需要确保数据的安全性,并处理好跨域访问的问题。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真鬼123

祝你节节高升岁岁平安越来越漂亮

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值