はじめに
UnityにMQTTライブラリを導入して、Milkcocoaに接続します。最後にiPadで動作確認します。
今回使うMQTTライブラリ:https://github.com/vovacooper/Unity3d_MQTT
導入
まず、こちらのURLからzipでプロジェクトごとダウンロードし、解凍します。
Import PackageからCustom Packageを選び、ダウンロードしたpackageファイルを選択します。
次に、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内のテスト実行で動くことを確認します。
iOSでも動作確認
この後、iOSにビルドしても動くことを確認しました。
ちょっと手間取ったのが、この問題。記事通りxcodeでBuild SettingsのENABLE_BITCODEを"NO"にするとビルドできました。プロジェクトをCleanするのも忘れずに。