渋谷ほととぎす通信

完全趣味でやってるUnityメモ。説明できないところを説明できるようにするための個人ブログ。昨日の自分より少しでも大きくなれるように。。。 ※所属団体とは一切関係がありません

UnityでOSCを使って通信する


f:id:esakun:20150730215258g:plain

UnityでOSCやってみます。

ググればこういった先人たちのありがたい情報が出てきますが、本ブログは知らないこと・分からないことは自分で書いてやってみることを重視しているので、参考にさせて頂きつつ自分で動かしてみます。

今回はOSCを使ってiPhoneアプリからMacのUnityを動かすという事をやってみます。

成果物はコチラ

f:id:esakun:20170402032355g:plain

iPhone側をコントロールするとMacで立ち上がっているUnityEditor上のイメージエフェクトのパラメータが変更されてノイズが走るというサンプルです。

先人たちが利用したUnityOSCを使わせてもらっています。

若干使いづらかったので元コード変更は最小限のラッパークラスを今回作成しました。

使用方法

受信側

// OSC受信インスタンス
OSCReceiver m_receiver;

void Start () 
{
    m_receiver = new OSCReceiver();
    m_receiver.Init ("TestServer", 8890);
    // 受信インスタンスに受信した時のイベントを登録
    m_receiver.onListenToOSCMessage += OnListenToOSCMessage;
}

void OnListenToOSCMessage (UnityOSC.OSCPacket obj)
{
    // 受信したときの処理
}

受信側はサンプルコードの通り、OSCReceiverを生成・初期化してonListenToOSCMessageイベントに受信時の処理を登録します。

送信側

// OSC送信インスタンス
OSCSender m_sender;
public Slider slider;

void Start () 
{
    m_sender = new OSCSender ();
    // 送信クライアント名のセット、IPアドレス、ポート番号は適宜調整
    // このIPアドレスとポート番号は受信側のIPアドレスとポート番号です
    m_sender.Init ("TestClient", 8890, IPAddress.Parse ("192.168.3." + Config.ipNum));
    var e = new Slider.SliderEvent ();
    // Sendメソッドで送信
    e.AddListener (x => m_sender.Send ("/changeValue", x));
    slider.onValueChanged = e;
}

送信側はOSCSenderを生成・初期化して、Sendメソッドを実行します。

UnityOSCからの変更点とポイント

  • 送信側はOSCSenderクラス、受信側はOSCReceiverクラスを使用する構成
  • 受信側は受信したときだけ通知するイベント登録式
  • OSCPacketを引数として受信イベントを受け取る
  • 特に必要ないのでMonoBehaviourは継承しない

注意点

このサンプルは同じ無線LAN内の機器同士しかつながりません。
また原因不明なんですがiOSの場合、IL2CPPでビルドしないとSendができなくなります(Receiveは可能)。

補足

今回のサンプルはiPhone <=> Macでしたが、iPhone同士ということも可能ですし、Mac同士も可能です。

ソースはこちら

環境

  • Unity5.5.2p2

あわせてどうぞ

www.shibuya24.info

www.shibuya24.info

www.shibuya24.info