在unity3d中接受MQTT消息协议数据C# .net,M2Mqtt

19 篇文章 0 订阅

具体关于MQTT是什么具体就不说了,百度一下,你就知道。这里用的是M2Mqtt的类库。可以去查官网然后git下来自己生成一下。接下来直接上unity客户端的本地代码:

需要提前导入生成的DLL。

using UnityEngine;
using System.Collections;
using System.Net;
using System.Text;
using uPLibrary.Networking.M2Mqtt;
using uPLibrary.Networking.M2Mqtt.Messages;

public class Mqtt : MonoBehaviour
{

    private MqttClient mqttClient;

    void Awake()
    {
        //链接服务器
        mqttClient = new MqttClient(IPAddress.Parse("192.168.1.163"));
       
        //注册服务器返回信息接受函数
        mqttClient.MqttMsgPublishReceived += client_MqttMsgPublishReceived;
        //客户端ID  一个字符串
        mqttClient.Connect("zsc");
        //监听FPS字段的返回数据
        mqttClient.Subscribe(new string[] { "fps" }, new byte[] { MqttMsgBase.QOS_LEVEL_AT_LEAST_ONCE });
    }
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {

	    if (Input.GetMouseButtonDown(0))
	    {
            //这个字符串是向服务器发送的数据信息
            string strValue = "123";
            // 发送一个内容是123 字段是klabs的信息
            mqttClient.Publish("klabs", Encoding.UTF8.GetBytes(strValue)); 
            Debug.Log("发送数据123");
	    }
	}

    static void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
    {
        // handle message received
        Debug.Log("返回数据");
        string msg = System.Text.Encoding.Default.GetString(e.Message);
        Debug.Log(msg);
    }
}

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Unity Webgl 使用 MQTT 可以通过引用 uPLibrary.Networking.M2Mqtt 库来实现。但是需要注意的是,Unity Webgl 平台存在一些限制,例如无法使用 Socket 和线程等。因此,使用 MQTT 库需要针对 Webgl 平台进行特殊处理。 以下是在 Unity Webgl 使用 uPLibrary.Networking.M2Mqtt 库的步骤: 1. 下载 uPLibrary.Networking.M2Mqtt 库,并将其添加到 Unity 项目。 2. 创建一个空的 GameObject,并将 M2MqttUnity.cs 脚本添加到该 GameObject 上。 3. 在 M2MqttUnity.cs ,添加以下代码: ``` #if UNITY_WEBGL && !UNITY_EDITOR [DllImport("__Internal")] private static extern void Connect(string brokerAddress, int brokerPort, string clientId, string username, string password); [DllImport("__Internal")] private static extern void Disconnect(); [DllImport("__Internal")] private static extern void Publish(string topic, string message); [DllImport("__Internal")] private static extern void Subscribe(string topic); [DllImport("__Internal")] private static extern void Unsubscribe(string topic); #endif ``` 4. 在 M2MqttUnity.cs ,添加以下代码: ``` public void Connect(string brokerAddress, int brokerPort, string clientId, string username, string password) { #if UNITY_WEBGL && !UNITY_EDITOR Connect(brokerAddress, brokerPort, clientId, username, password); #else client = new MqttClient(brokerAddress, brokerPort, false, null); client.Connect(clientId, username, password); #endif } public void Disconnect() { #if UNITY_WEBGL && !UNITY_EDITOR Disconnect(); #else client.Disconnect(); #endif } public void Publish(string topic, string message) { #if UNITY_WEBGL && !UNITY_EDITOR Publish(topic, message); #else client.Publish(topic, Encoding.ASCII.GetBytes(message), MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE, false); #endif } public void Subscribe(string topic) { #if UNITY_WEBGL && !UNITY_EDITOR Subscribe(topic); #else client.Subscribe(new string[] { topic }, new byte[] { MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE }); client.MqttMsgPublishReceived += client_MqttMsgPublishReceived; #endif } public void Unsubscribe(string topic) { #if UNITY_WEBGL && !UNITY_EDITOR Unsubscribe(topic); #else client.Unsubscribe(new string[] { topic }); #endif } ``` 5. 创建一个 UI Canvas,并添加 InputField、Button 和 Text 等 UI 组件。 6. 创建一个 C# 脚本,并将其添加到 UI Canvas 上。 7. 在 C# 脚本,添加以下代码: ``` using UnityEngine; using UnityEngine.UI; public class MQTTExample : MonoBehaviour { public InputField brokerAddressInput; public InputField brokerPortInput; public InputField clientIdInput; public InputField usernameInput; public InputField passwordInput; public InputField topicInput; public InputField messageInput; public Button connectButton; public Button disconnectButton; public Button publishButton; public Button subscribeButton; public Button unsubscribeButton; public Text messageText; private M2MqttUnity mqtt; void Start() { mqtt = gameObject.AddComponent<M2MqttUnity>(); } void Update() { if (Input.GetKeyDown(KeyCode.Return)) { if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) { publishButton.onClick.Invoke(); } else { connectButton.onClick.Invoke(); } } } public void OnConnectButtonClicked() { string brokerAddress = brokerAddressInput.text; int brokerPort = int.Parse(brokerPortInput.text); string clientId = clientIdInput.text; string username = usernameInput.text; string password = passwordInput.text; mqtt.Connect(brokerAddress, brokerPort, clientId, username, password); } public void OnDisconnectButtonClicked() { mqtt.Disconnect(); } public void OnPublishButtonClicked() { string topic = topicInput.text; string message = messageInput.text; mqtt.Publish(topic, message); } public void OnSubscribeButtonClicked() { string topic = topicInput.text; mqtt.Subscribe(topic); } public void OnUnsubscribeButtonClicked() { string topic = topicInput.text; mqtt.Unsubscribe(topic); } void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e) { string message = Encoding.UTF8.GetString(e.Message); messageText.text = message; } } ``` 8. 在 Unity 编辑器,将 UI 组件和 C# 脚本拖放到对应的字段上。 9. 运行 Unity Webgl 应用程序,并测试 MQTT 功能。 注意事项: 1. Unity Webgl 平台无法使用 Socket 和线程,因此需要通过 JavaScript 调用 Unity Webgl 应用程序的函数来实现 MQTT 功能。 2. 在 Unity Webgl ,需要使用 [DllImport("__Internal")] 标记来声明 JavaScript 函数。 3. Unity Webgl 的 JavaScript 函数需要在 HTML 文件进行定义,并通过 index.html 文件引用。例如: ``` <script type="text/javascript"> function Connect(brokerAddress, brokerPort, clientId, username, password) { UnitySendMessage("M2MqttUnity", "Connect", brokerAddress + "," + brokerPort + "," + clientId + "," + username + "," + password); } function Disconnect() { UnitySendMessage("M2MqttUnity", "Disconnect", ""); } function Publish(topic, message) { UnitySendMessage("M2MqttUnity", "Publish", topic + "," + message); } function Subscribe(topic) { UnitySendMessage("M2MqttUnity", "Subscribe", topic); } function Unsubscribe(topic) { UnitySendMessage("M2MqttUnity", "Unsubscribe", topic); } </script> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值