Unity 3D 使 用 MQTT 实 现 数 据 通 信

最近学习需要在Unity中用到MQTT通信,CSDN下载了一些资料都有报错(主要是也不太看得懂代码不会改),跟B站up复现了一个简单的demo算是加深了一些学习,有需要的初学者可以自取。

demo实现步骤大致如下

1.HslCommunication组件添加

 要先下载个HslCommunication,选中文件夹里这俩个文件直接拖到unity里就行

 2.Unity创建脚本文件,编译后直接扔摄像头上就完事儿了,上代码,Topic根据需求进行更改

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using HslCommunication.MQTT;
using System.Text;
using System.Diagnostics;
using System;

public class mqtt_test : MonoBehaviour
{
    private MqttClient mqttClient;
    // Start is called before the first frame update
    void Start()
    {
        mqttClient = new MqttClient(new MqttConnectionOptions()
        {
            ClientId = "ABC",                     // 客户端的唯一的ID信息
            IpAddress = "127.0.0.1",              // 服务器的地址
        });
        // 连接服务器
        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) =>
        {
            //Console.WriteLine("Time:" + DateTime.Now.ToString());
            //Console.WriteLine("Topic:" + topic);
            //Console.WriteLine("Payload:" + Encoding.UTF8.GetString(payload));
            UnityEngine.Debug.Log("Time:" + DateTime.Now.ToString());
            UnityEngine.Debug.Log("Topic:" + topic);
            UnityEngine.Debug.Log("Payload:" + Encoding.UTF8.GetString(payload));
        };


    }

    // Update is called once per frame
    void Update()
    {
        if(Input.GetKey(KeyCode.Space))
        {
            HslCommunication.OperateResult connect = mqttClient.PublishMessage(new MqttApplicationMessage()
            {
                Topic = "/AAA",                 //主题
                QualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce,       //如果是实时数据,适合用这个
                Payload = Encoding.UTF8.GetBytes("Test data")
            });
            if(connect.IsSuccess)
            {
                //发布成功
                UnityEngine.Debug.Log("发布成功");
            }
            else
            {
                UnityEngine.Debug.Log("发布失败");
            }
        }
    }
}

 3.(1)在Unity里运行场景

    (2)与MQTTX进行联调(MQTTfx也行),地址一致,主题对应就行

订阅MQTTX的主题

按空格发布消息“Test data”,MQTTX订阅Unity端的主题,接收发布的消息成功

 

 

 

  • 3
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值