渋谷ほととぎす通信

エンジニア社長によるUnityとAIのブログ & エンジニアの生存戦略

【Unity】OSCを使ったデバイス間の通信入門

【Unity】OSCを使ったデバイス間の通信入門

こんにちは、Unityエンジニアのオオバです。

お悩みさん
お悩みさん
  • UnityでOSCって使えるの?
  • Unityとデバイスを通信したい
  • オオバ
    オオバ
    本記事ではこれらの悩みを解決します。

    OSCを使用するとお手軽にデバイス間を越えた通信が可能になります。例えばパソコンとスマートフォン。

    OSCを使うことでとても簡単に実現できるのです。

    そこで本記事ではUnityでOSCを使った作品づくりの解説をしていきます。Unityを作品づくりに使用したい方にはアイデアの引き出しを増やすきっかけになるかもしれません。

    ぜひ最後まで読んでみてください。

    👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!

    そもそもOSCとは?

    OSとは 「Open Sound Control」 の略で、コンピュータやデバイス間でリアルタイムにデータをやり取りする通信プロトコルです。

    UDPという通信方式を使うためリアルタイム通信に向いています。数値・文字列・配列など色々なデータが送れるため柔軟性が高いです。「アドレス + 値」というシンプルな構造で扱いやすい特徴があります。

    プログラミング初心者の方でもOSCは扱いやすいプロトコルのためオススメです。

    OSCを使ってiPhoneからMacのUnityを動作させる

    今回作成するのはOSCを使ったiPhoneとMac間の通信です。iPhoneからOSCを使って送信処理を、Macは受信処理を作成します。

    実際作成した作品はこちらです。
    【Unity】OSCを使ったデバイス間の通信入門_0

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

    UnityでOSCを使う準備

    早速UnityでOSCを使っていくわけですが、今回はUintyOCSというライブラリを使って使って実装していきます。

    ただし使いづらかった点があったため、元コードを多少変更したラッパークラスを今回作成して実装をしています。

    OSC受信側の実装

    最初にOSC受信側の実装を進めていきます。手順は次の通りです。

    1. OSCReceiverを生成
    2. OSCReceiverを初期化
    3. onListenToOSCMessageに受信時の処理を登録

    具体的なソースコードを見ていきましょう。

    たったこれだけで受信側の通信が可能になります。

    OSC送信側の実装

    次に送信側、つまりiPhoneにインストールアプリ側の実装を次の手順で進めていきます。

    1. OSCSenderを生成
    2. OSCSenderを初期化
    3. OSCSenderのSendメソッドで送信

    ソースコードを確認してみます。

    今回はuGUIのスライダーを使用して値を送信しています。送信側はOSCSenderを生成・初期化して、Sendメソッドを実行します。

    ポイントはOSCSenderの初期化時に送信先のIPアドレスを指定することです。

    m_sender.Init ("TestClient", 8890, IPAddress.Parse ("192.168.3.11"));  
    

    具体的には "192.168.3.11" の部分です。IPアドレス自体は次のコマンドをシェルで実行すれば調べられます。

    $ ipconfig getifaddr en0  
    

    このコマンドで得られたIPアドレスを指定してください。

    【Unity】OSCを使ったデバイス間の通信入門_1

    OSCのテスト方法

    Unityでテストする方法はいくつかあります。

    1つは複数のUnityエディタを同時起動する方法です。Unityプロジェクトをコピーして2つのUnityプロジェクト同士をそれぞれ「送信側」「受信側」にして処理をテストするのです。

    MacとiPhoneといったデバイス間ではありませんが、Unityエディタ同士の通信も同様です。

    もう1つは実際にiPhoneへインストールした実機テストです。UnityエディタからiPhone向けにビルドしてiPhone実機にインストールしてみましょう。

    iPhone向けのアプリを作る際は次の記事を参考にしてみてください。

    実際にテストすると、送信側のiPhoneから受信側のMac(Unityエディタ)に対してOSC通信します。

    【Unity】OSCを使ったデバイス間の通信入門_2

    iPhoneアプリ側のスライダーUIを操作するとMac(Unityエディタ)上の表示が更新されます。

    Unity OSC使用時の注意点

    OSCを使用する際には注意点があります。

    今回のサンプルは同じ無線LAN内で通信したため、IPアドレスを指定するだけで通信できました。

    インターネット経由で通信する場合はルーターの設定が必要になるため注意してください。

    サクッとテストしたい場合は同じLAN内で通信すると簡単です。

    まとめ:UnityでOSCを使ってデバイス間通信

    本記事ではOSCを使ったデバイス間通信入門ということでiPhoneとMacを通信してみました。

    UnityでOSCを扱うために外部ライブラリUnityOSCをカスタマイズして使用しました。OSCを使うととても簡単にデバイス間通信ができるということがわかったと思います。

    ぜひOSCを使ってインタラクティブな作品やアプリ開発にぜひ活用してみてください。

    今回使用したUnityプロジェクト一式はこちらです。

    オススメ記事
    検証環境
    • Unity2018.2.7f1
    参考サイト