本次内容是讲述如何将mqtt服务器中接收到的数据在Unity3D的文本框控件中显示JSON键值对中的“值”。
需求:
1.GameObject——>UI——>Text (将Unity 3D的文本框控件置于场景)
命名空间引用:using UnityEngine.UI;
2.Newtonsoft插件
命名空间引用:Newtonsoft.Json.Linq;
3.MQTT通讯需求:
(1)http://www.hslcommunication.cn/ 胡工科技下载资源库
(2)将两个DLL文件拖入Unity的scripts文件夹(2021版本及以上的Unity不同添加Newtonsoft,不然好像会报错,Unity已经自带了)
代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using HslCommunication.MQTT;
using System.Text;
using System.Diagnostics;
using System;
using System.IO;
using Newtonsoft.Json.Linq;
public class text_transfer : MonoBehaviour
{
private MqttClient mqttClient;
public Text timeText; //在unity里的定义
public string TimeText;
// Start is called before the first frame update
void Start()
{
timeText = GameObject.Find("Canvas/Text").GetComponent
mqttClient = new MqttClient(new MqttConnectionOptions()
{
ClientId = "ABC", // 客户端的唯一的ID信息
IpAddress = "192.168.1.126", // mqtt服务器的地址
});
// 连接服务器
HslCommunication.OperateResult connect = mqttClient.ConnectServer();
if (connect.IsSuccess)
{
// 连接成功
UnityEngine.Debug.Log("连接成功");
}
else
{
// 连接失败,过会就需要重新连接了
UnityEngine.Debug.Log("连接失败");
}
// 然后添加订阅
HslCommunication.OperateResult sub = mqttClient.SubscribeMessage("test");
if (sub.IsSuccess)
{
// 订阅成功
UnityEngine.Debug.Log("订阅成功");
}
else
{
// 订阅失败
UnityEngine.Debug.Log("订阅失败");
}
// 订阅示例
mqttClient.OnMqttMessageReceived += (MqttClient client, string topic, byte[] payload) =>
{
TimeText = Encoding.UTF8.GetString(payload);
UnityEngine.Debug.Log("Time:" + DateTime.Now.ToString());
UnityEngine.Debug.Log("Topic:" + topic);
UnityEngine.Debug.Log("Payload:" + Encoding.UTF8.GetString(payload));
//timeText.text = TimeText;
};
}
private void Update()
{
string json = TimeText;
JObject obj = JObject.Parse(json);
timeText.text = obj["转速1"].ToString(); //将对应键的数值赋值给文本框
UnityEngine.Debug.Log(timeText.text);//打印值的内容在文本框
//UnityEngine.Debug.Log(Convert.ToInt64(timeText.text));
}
}
1.定义文本框函数
2.接收JSON数据包
3.解析
4.可以用多个文本框接收对应需求的数据,或是所有数据在一个文本框显示亦可
单文本框显示:
多文本框对应显示:多设置几个文本框变量再照前面的重复操作下就行了