在 Unity 中使用 MQTTnet

Unity实现MQTT服务器 到这服务器与客户端脚本完成,接下来只需要写一些测试脚本,调用上面脚本的接口,即可完成服务器的开启/关闭,客户端连接,收发消息等功能。然后再/Source/MQTTnet/bin/Debug/net452 文件夹中找到生成的文件。解压好后使用vs打开,并生成.dll文件(我这里下载的是4.1.2.350版本)新建unity工程,创建Plugins文件夹,将文件复制到该文件夹内。然后新建脚本MyMqttServer,代码内带有注释。创建脚本MyMqttClient,代码内带有注释。 阅读详情


前言

2025年3月24日

Unity 2022.3.54f1


MQTT X

桌面客户端,用于查看和测试 MQTT
官网地址:https://mqttx.app/


免费的公共 MQTT 服务器

官网地址:https://www.emqx.com/zh/mqtt/public-mqtt5-broker

Broker:broker.emqx.io
TCP 端口:1883
主题:testtopic/#(注意默认禁止了 $SYS 主题和 # 主题,此处可换为其他的,还挺多的 test 之类的)
MQTT版本:5.0


MQTTnet.dll

两种方式导入 MQTTnet ,
1、从 nuget.org 把包下载下来,解压后将对应平台的 dll 从 lib 文件夹中取出来,放到 Plugins 文件夹。
2、为 Unity 安装 NuGetForUnity 包管理器,通过它搜索 MQTTnet 安装。

注意 dll 的版本的依赖,是否为 Unity 所支持

Unity3D 入门:为 Unity 的 C# 项目添加 dll 引用或安装 NuGet 包
Unity3D 入门:如何管理 Unity 项目中的 NuGet 包?使用第三方 NuGet 包管理器——NuGetForUnity


一、自行下载、解压、导入

下载依赖包含 .NETStandard 2.1 的 mqttnet.4.3.7.1207.nupkg。

最新的 5.0 只依赖 .net8.0 , Unity 里面用不了

将下载好的文件后缀改为 zip ,并解压。

根据 Unity 中设置的 API 兼容性级别 ,找到对应的 lib 文件夹下的 dll 放到 Plugins 文件夹中。

F:\mqttnet.4.3.7.1207\lib\netstandard2.1\MQTTnet.dll


二、安装 NuGetForUnity ,导入

去这里下载最新的Release
https://github.com/GlitchEnzo/NuGetForUnity

导入后,Unity 上方工具栏点击 NuGet / Manage NuGet Packages,找到对应版本的 MQTTnet ,Install


三、代码示例

using System;
using System.Threading.Tasks;
using UnityEngine;
using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Exceptions;

public class MQTTManager : MonoBehaviour
{
    private IMqttClient mqttClient;
    public string brokerAddress = "broker.emqx.io"; // Change to your broker address
    public int brokerPort = 1883; // Default MQTT port
    public string topic = "testtopic/#";

    public MQTTnet.Formatter.MqttProtocolVersion mqttProtocolVersion = MQTTnet.Formatter.MqttProtocolVersion.V500;

    private void Start()
    {
        InitializeMQTTClient();
    }

    private async void InitializeMQTTClient()
    {
        mqttClient = new MqttFactory().CreateMqttClient();

        var options = new MqttClientOptionsBuilder()
            .WithClientId("UnityClient_" + Guid.NewGuid())
            .WithTcpServer(brokerAddress, brokerPort)
            .WithProtocolVersion(mqttProtocolVersion)
            .Build();


        mqttClient.ApplicationMessageReceivedAsync += MqttClient_ApplicationMessageReceivedAsync;
        mqttClient.ConnectedAsync += MqttClient_ConnectedAsync;
        mqttClient.DisconnectedAsync += MqttClient_DisconnectedAsync;

        try
        {
            await mqttClient.ConnectAsync(options);
            Debug.Log("Connected to MQTT broker.");
            SubscribeToTopic(topic); // Change to your topic
        }
        catch (MqttProtocolViolationException ex)
        {
            Debug.LogError($"Protocol error: {ex.Message}");
        }
        catch (Exception ex)
        {
            Debug.LogError($"Could not connect to MQTT broker: {ex.Message}");
        }
    }

    private Task MqttClient_DisconnectedAsync(MqttClientDisconnectedEventArgs arg)
    {
        return Task.CompletedTask;
    }

    private Task MqttClient_ConnectedAsync(MqttClientConnectedEventArgs arg)
    {
        return Task.CompletedTask;
    }

    private Task MqttClient_ApplicationMessageReceivedAsync(MqttApplicationMessageReceivedEventArgs arg)
    {
        Debug.Log(arg.ApplicationMessage.Topic);
        Debug.Log(arg.ApplicationMessage.ConvertPayloadToString());

        return Task.CompletedTask;
    }

    public async void PublishMessage(string topic, string message)
    {
        if (mqttClient.IsConnected)
        {
            var mqttMessage = new MqttApplicationMessageBuilder()
                .WithTopic(topic)
                .WithPayload(message)
                .WithQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce)
                .WithRetainFlag()
                .Build();

            await mqttClient.PublishAsync(mqttMessage);
            Debug.Log($"Published message: {message} to topic: {topic}");
        }
        else
        {
            Debug.LogWarning("MQTT client is not connected.");
        }
    }

    public async void SubscribeToTopic(string topic)
    {
        if (mqttClient.IsConnected)
        {
            var topicFilter = new MqttTopicFilterBuilder()
                .WithTopic(topic)
                .Build();

            await mqttClient.SubscribeAsync(topicFilter);
            Debug.Log($"Subscribed to topic: {topic}");
        }
        else
        {
            Debug.LogWarning("MQTT client is not connected.");
        }
    }

    private async void OnApplicationQuit()
    {
        if (mqttClient != null)
        {
            await mqttClient.DisconnectAsync();
            Debug.Log("Disconnected from MQTT broker.");
        }
    }
}
c# 使用MQTT进行数据传输 1.引入MQTTnet.dll 本例引用版本为3.0.15.0,如版本不一致,请参考最新官方文档:https://github.com/chkr1011/MQTTnet/wiki/Server 阅读详情

相关推荐

Unity 物联网通信实战:基于 MQTTnet 的客户端开发与部署

本文详细介绍了在Unity中集成MQTTnet库进行物联网通信的实战开发流程。从DLL导入、版本兼容性处理,到编写健壮的MQTT客户端管理器,涵盖连接、订阅、发布、线程安全及异常处理等核心环节,为构建数字孪生、设备监控等实时数据应用提供完整解决方案。

nn3456的博客 469

C# MQTTnet使用心得和C# MQTT库M2Mqtt的使用方法

1.MQTTnet开源库,https://github.com/chkr1011/MQTTnet MQTTnet.dll 2.8.5 下载 链接:https://pan.baidu.com/s/1BjQ41vOqQ6-JoY06m2uN4Q 提取码:a18s (此版本示例:https://download.csdn.net/download/uaime/11359429我尝试升级版本,很...

无线智能模块 可视DIY智能专家 2万+

Unity数字孪生实战:基于MQTTnet构建实时数据通信桥梁

本文详细介绍了如何使用MQTTnet在Unity中构建数字孪生实时数据通信系统。通过MQTT协议的轻量级特性与MQTTnet库的全平台兼容性,开发者可以高效实现物理设备与虚拟世界的实时数据同步。文章包含环境搭建、双向通信实现及性能优化等实战内容,特别适合需要处理高频率数据传输的物联网应用开发。

weixin_42683394的博客 413

MQTT协议 C#客户端

1、引入M2MQTT的dll库文件 点击此处下载M2Mqtt.Net.dll 2、建立客户端连接并订阅 //创建客户端实例 MqttClient client = new MqttClient(IPAddress.Parse(MQTT_BROKER_ADDRESS)); //主机为IP时 MqttClient client = new MqttClient(MQTT_BROKER...

weixin_30375427的博客 1335

Unity 物联网通信实战:从零集成 MQTTnet 到发布订阅

本文详细介绍了如何在Unity中集成MQTTnet实现物联网通信,包括环境准备、依赖管理、客户端构建及实战应用。通过MQTT协议的高效发布订阅模式,开发者可以轻松实现实时数据交互,适用于智慧城市、设备监控等场景。文章还提供了性能优化和调试技巧,帮助开发者快速上手。

weixin_26516551的博客 1177

Unity集成MQTTnet:物联网实时通信与数字孪生开发实战

在物联网和实时应用开发中,消息队列遥测传输(MQTT)协议因其轻量级和发布/订阅模式,成为解决服务器主动推送、设备状态同步等场景的关键技术。其核心原理基于主题(Topic)的消息路由,实现了低带宽消耗和高并发连接,技术价值在于为数字孪生、远程监控等应用提供了高效的异步通信基础。MQTTnet作为.NET生态中功能完善的客户端库,支持跨平台与异步API,能无缝集成至Unity引擎,解决主线程阻塞与网络兼容性问题。本文通过实战演示,利用MQTTnet在Unity中构建客户端管理器,实现设备控制与状态上报,并涵盖

weixin_29165725的博客 293

unity 使用MQTTnet进行mqtt数据传输

最近在做数字孪生的mqtt服务,采用的是mqttnet插件制作,首先在unity中导入mqttnet,导入完成后需要配置一下net平台为4.x如下图,unity版本为2023.2.20f1cf,导入Mqttnet需要Nugetforunity包,这个包可以在github上获取。剩下就是代码部分,大家可以针对代码进行删减达到自己想要的效果。

qq_43687127的博客 993

Unity开发者必备:NuGetForUnity一键管理MQTTnet等C#库依赖

在现代软件开发中,依赖管理是保障项目稳定性和团队协作效率的核心环节。其核心原理是通过声明式配置和中央化仓库,自动解析、下载并维护库及其依赖的版本一致性,从而避免手动管理导致的“依赖地狱”。这一技术价值在于将开发者从繁琐的库文件搜寻、版本冲突排查中解放出来,显著提升开发体验和项目可维护性。在Unity游戏开发领域,开发者常需集成如MQTTnet这类用于物联网通信的第三方C#库,传统手动拖拽DLL的方式效率低下且易出错。NuGetForUnity作为Unity编辑器扩展,无缝集成了.NET生态的NuGet包管理

weixin_34026997的博客 328

告别手动拖dll!用NuGetForUnity在Unity中一键安装MQTTnet,管理依赖真省心

本文详细介绍了如何使用NuGetForUnity插件在Unity中一键安装和管理MQTTnet库,彻底告别手动拖放dll的繁琐流程。通过NuGetForUnity,开发者可以轻松解决版本管理、依赖冲突等常见问题,提升团队协作效率,特别适合物联网和游戏开发项目。

weixin_29012677的博客 225

Unity开发告别手动DLL管理:使用NuGetForUnity集成MQTTnet等第三方库

在Unity开发中,依赖管理是构建稳定项目的关键技术基础。传统手动管理DLL文件的方式容易引发版本冲突、依赖缺失等问题,而现代软件工程通过包管理器实现自动化依赖解析和版本控制。NuGet作为.NET生态的标准包管理器,为C#库提供了统一的发布、分发和依赖管理机制。通过NuGetForUnity这一桥梁工具,开发者可以将成熟的.NET生态无缝引入Unity项目,实现依赖管理的自动化和规范化。这种技术方案特别适用于需要集成网络通信、物联网协议等通用C#库的场景,例如集成流行的MQTTnet库实现MQTT协议通信

weixin_42635064的博客 206

M2Mqtt.Net.dll

在c#导入mqtt通讯需要的包.不懂的怎么导入的话我可以私聊 我也可以把地址发出来给大家自己去做 我这个是做好了 方便大家的文件

c# MQTTnet,MQTTnet.Extensions.ManagedClient

c# MQTTnet,MQTTnet.Extensions.ManagedClient

MQTT需要的dll文件

MQTT相关dll文件,版本是2.4。下载后解压就可使用。。

Unity 2022.3集成MQTTnet 4.3.7实现物联网数据实时通信

MQTT作为一种轻量级的发布/订阅消息传输协议,是物联网设备通信的基石。其核心原理基于TCP/IP协议,通过主题过滤机制实现高效的一对多消息分发,具有低带宽、低功耗和高可靠性的技术价值,广泛应用于智能家居、工业监控和实时数据推送等场景。在Unity引擎中,通过集成MQTT客户端库,开发者可以将游戏对象或虚拟场景与物理世界的传感器数据联动,实现数字孪生或状态同步。本文以Unity 2022.3的.NET Standard 2.1环境为例,详细解析如何手动引入兼容的MQTTnet 4.3.7的DLL文件,并编写

weixin_34037515的博客 419

mqtt客户端,适合初学者参考,使用的是mqttnet三方包

mqtt客户端,实现了连接,订阅,发布等功能,使用mqttnet的三方包,希望对初学者有帮助。开发平台是C# vs2019 net4.8

M2Mqtt.Net.dll C#库文件

用于MQTT通信的C#客户端

Unity数字孪生项目实战:用MQTTnet搞定物联网数据通信(附完整C#代码)

本文详细介绍了在Unity数字孪生项目中如何使用MQTTnet实现物联网数据通信,包括架构设计、环境配置、核心通信模块实现及性能优化技巧。通过完整的C#代码示例,帮助开发者高效解决实时数据同步问题,提升数字孪生系统的可靠性和性能。

weixin_30357231的博客 417

MQTT服务端和客户端工具

【更新日期:2026-03-03】 【版本:V1.0.5/V1.0.4】 详细说明:https://blog.csdn.net/a342874650/article/details/136028550 因在工作中经常有用到MQTT做消息的收发,每次调试过程中,经常需要查看接收的消息内容以及人为发送消息,为便于个人在工作中开发和调试,于是,就萌生了自己写一个简单又好用的MQTT服务端和客户端的想法。 以下为本程序的相关信息: 1、本项目为visual studio工具创建并编译。 2、程序运行前需要配置一下连接MQTT服务端的ip、端口、用户名、密码等信息,连接后程序将自动保存上次输入的连接信息以及订阅的主题。 3、支持批量订阅主题、取消订阅、单个/批量删除订阅、多开发送消息窗口,方便指定主题进行消息接收。 4、支持接收消息自动保存至程序目录下的日志文件中,方便查阅。 5、简洁友好的操作界面,新手上少快。 6、本程序的开发语言及框架为:C#、winform。 7、本程序为我业余时间开发,旨在简化mqtt消息的返送和接收。 8、本程序仅供学习交流,请勿用于任何商业场景,由于使用本程序造成的任何损失需自行承担。

上一篇: Winform小工具的自动更新功能实现
下一篇: 在 Unity 中使用 OpcUa
wooderZ
博客等级 码龄9年 32粉丝 7原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值