15
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Organization

UnityでMQTTライブラリを使って、Milkcocoaに接続、さらにiPadでも動かす

はじめに

UnityにMQTTライブラリを導入して、Milkcocoaに接続します。最後にiPadで動作確認します。

今回使うMQTTライブラリ:https://github.com/vovacooper/Unity3d_MQTT

導入

まず、こちらのURLからzipでプロジェクトごとダウンロードし、解凍します。

スクリーンショット 2016-01-24 2.21.54.png

Import PackageからCustom Packageを選び、ダウンロードしたpackageファイルを選択します。

スクリーンショット 2016-01-24 2.24.33.png

次に、ProjectタブのAssetsの中からMQTTをドラッグして、左上のHierarchy内に持ってきます。このオブジェクトにはMqtt TestというScriptが紐付いているので。Mqtt Test Scriptを編集します。{app-id}のところは、MilkcocoaのAppIDです。自分のAppIDに置き換えてください。Milkcocoaでアカウント登録後、アプリを作るとAppIDが発行されます。

using UnityEngine;
using System.Collections;
using System.Net;
using uPLibrary.Networking.M2Mqtt;
using uPLibrary.Networking.M2Mqtt.Messages;
using uPLibrary.Networking.M2Mqtt.Utility;
using uPLibrary.Networking.M2Mqtt.Exceptions;

using System;

public class mqttTest : MonoBehaviour {
    private MqttClient client;
    // Use this for initialization
    void Start () {
        // create client instance 
        client = new MqttClient("{app-id}.mlkcca.com", 1883 , false , null ); 

        // register to message received 
        client.MqttMsgPublishReceived += client_MqttMsgPublishReceived; 

        string clientId = Guid.NewGuid().ToString(); 
        client.Connect(clientId, "sdammy", "{app-id}"); 

        // subscribe to the topic "/home/temperature" with QoS 2 
        client.Subscribe(new string[] { "{app-id}/unity/send" }, new byte[] { MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE }); 

    }
    void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e) 
    { 

        Debug.Log("Received from Milkcocoa: " + System.Text.Encoding.UTF8.GetString(e.Message)  );
    } 

    void OnGUI(){
        if ( GUI.Button (new Rect (20,40,100,30), "Hello")) {
            Debug.Log("sending...");
            client.Publish("{app-id}/unity/send", System.Text.Encoding.UTF8.GetBytes("{\"message\":\"Hello\"}"), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false);
            Debug.Log("sent to Milkcocoa");
        }
    }
    // Update is called once per frame
    void Update () {

    }
}

動作確認

とりあえずUnity内のテスト実行で動くことを確認します。

スクリーンショット 2016-01-24 2.21.03.png

iOSでも動作確認

この後、iOSにビルドしても動くことを確認しました。
ちょっと手間取ったのが、この問題。記事通りxcodeでBuild SettingsのENABLE_BITCODEを"NO"にするとビルドできました。プロジェクトをCleanするのも忘れずに。

1355.jpg

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
15
Help us understand the problem. What are the problem?