UnityRenderStreaming 网页端发送字符串,Unity接收字符串


前言

上一章了解了网页端是如何打包数据发送给Unity的,由于Unity这边收数据的方式比较容易理解 我就不分开讲了
这篇文章直接将如何让网页端发送字符串给Unity

一、网页端修改发送数据包的代码

1.首先打开app.js

找到生成三个按钮的代码,注释掉其中两个,留下一个用作测试发送字符串
在这里插入图片描述

2.修改register-events.js

由于原来的方法Dataview的SetInt16只能传送2个字节的数字(这里代码找不到的朋友可以看我上一篇文章)
我的方法是将字符串先转化为utf8编码,再转化为字节流放入DataView中

先添加一个方法用于字符串的utf8转换

function utf8AbFromStr(str) {
      var strUtf8 = unescape(encodeURIComponent(str));
      var array = new Uint8Array(strUtf8.length);
      for (var i = 0; i < strUtf8.length; i++) {
          array[i] = strUtf8.charCodeAt(i);
      }
      return array;
    }

由于data.setUint8占用了字节流的第1个字节位置,为了不破坏原来的数据格式,所以可以给字符串前加一个空格用来留给它 (这一个字节的用处 下文有讲到!)By老弟自然卷

	elementId=" "+elementId;
    var buf=utf8AbFromStr(elementId);
    et data = new DataView(buf.buffer);
    data.setUint8(0, InputEvent.ButtonClick);
  
    videoPlayer && videoPlayer.sendMsg(data.buffer);

在这里插入图片描述

二、修改Unity端接收数据的代码

1.RemoteInput.cs

找到ProcessInput(byte[] bytes)方法
其中bytes[]就是网页端传来的数据包的字节流

在方法中找到case EventType.ButtonClick:
在这里插入图片描述
从上面的图片中可以得知:原来数据包的第一位字节是用来判断事件类型的!!!By老弟自然卷
在这里插入图片描述
通过提示可以看出来这个方法只能将字节流转为short类型,而我们现在传输的是utf8编码的字节流,很显然是不能用这个方法还原的
因此将这个方法改为

var elementId = System.Text.Encoding.UTF8.GetString(bytes, 1, bytes.Length - 1);

由于原来的方法只能接收Int类型,导致后面的代码也会相应报错,很简单把报错的地方都改成String就好了!!
在这里插入图片描述
在这里插入图片描述
这个脚本里的报错就改完了,但是回到Unity发现RenderStreaming也有报错,接着改!By老弟自然卷

2.RenderStreaming.cs

在这里插入图片描述
在这里插入图片描述
By老弟自然卷

到这里修改得差不多了

Debug输出一下接收到的字符串
在这里插入图片描述
确保启动了web服务 运行项目 打开网页输入ip 单击按钮
见证奇迹的时刻到了!
在这里插入图片描述
在这里插入图片描述
传输字符串的功能完成了,接下去对字符串的处理可以自己修改代码完成自己想要的功能了。

方法不唯一,条条大路通罗马,如果你有其他方法,感谢分享。

如果有在使用URS的朋友可以我一起学习!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值