>   >  Unityでつくるインタラクティブコンテンツ:第9回:Open Sound Controlでライトを制御する
第9回:Open Sound Controlでライトを制御する

第9回:Open Sound Controlでライトを制御する

今回は、通信プロトコルOSCを、Unityで使えるようにセットアップします。

TEXT_高田稔則 / Toshinori Takata(Codelight
EDIT_小村仁美 / Hitomi Komura(CGWORLD)

<1>UnityでOSCを使えるようにする

こんにちは、高田です。いままでいくつかのセンサの値を取る例を紹介してきました。こういったセンシングのプログラムを毎回コンテンツに組み入れるのは多少手間がかかります。またセンサとコンテンツで処理PCを分ける必要がある、などの理由でセンシング部分と演出部分でプログラムを分離する場合があります。弊社でもGUI絡みの部分はUnityのuGUI、演出部分は別PCで稼働するTouchDesignerで制作するといったことを行なっています。今回はそのような状況でよく使われる通信プロトコルOSC(Open Sound Control)を紹介します。OSCは、異なるアプリケーションやハードウェア間でのデータ通信を行うための規格です。

OSCに関しては下記の田所 淳さんのエントリにわかりやすく書いてあります。2010年の記事ですが仕様は変わっていないので参考にするのに問題はありません。OSCの最初の仕様が出たのが2002年ですから十分枯れたフォーマットだと言えますし、多くのアプリケーションやハードウェアで標準的に実装されています。

openFramewoks - OSC (Open Sound Control) を利用したネットワーク連携
https://yoppa.org/ma2_10/2279.html

残念ながらUnityには標準でOSCのライブラリが用意されていません。そのかわりたくさんの実装が公開されているため、自分の使いやすいものを選ぶことができます。今回はUnity Japanの高橋 啓治郎さんがGitHubで公開している「OscJack」を利用してみます。

GitHub - keijiro/OscJack: Lightweight implementation of OSC server/client in C# (Unity)
https://github.com/keijiro/OscJack

zipをダウンロードしAssets/OscJackフォルダをUnityのAssetsフォルダにインポートします。


これでUnity側の準備は完了です。OSCを試してみるのに一番手軽なのは、iOS/Android用のアプリである「TouchOSC」を使う方法です。

TouchOSCをインストールした端末を、通信したいPCと同じネットワークに接続します。TouchOSCを起動するとCONNECTIONSセクションにOSC:192.168.1.100などIPアドレスが書いてある部分があります。これをタッチしてHost部分にデータを送りたいIPを送信したいPCのIPアドレスを指定して下さい。Port(outgoing)は送信時に使うポート番号、Port(incoming)は受信時のポート番号です。

UnityのWindowからOSC Monitorを起動します。



TouchOSCでデータを送ってみます。以下のようにデータが送られてきた人もいると思いますが、何も起こらない人もいると思います。

原因を考えてみます。データが送られてこないほとんどの理由は、Windowsファイアウォールで遮断されているからです。Windowsの設定から「ネットワークとインターネット」を開きます。


次に「ファイアウォールとネットワーク保護」の内容を確認して下さい。「ドメインネットワーク」、「プライベートネットワーク」、「パブリックネットワーク」のいずれかがアクティブになっていると思います。アクティブになっているネットワークが自分が接続されているものです。


どのネットワークがアクティブになっているかを確認して、「詳細設定」を開きます。筆者が動かしているのはUnity 2019.1.6.f1のEditorなので該当するプログラムを探してみると、パブリックの接続がブロックされています。


プロパティを開き、「接続を許可する」にチェックを入れOKします。

これでパブリックでも接続が許可されました。もう一度データを送ってみると、モニタに表示されるようになったと思います。


ネットワークを介した連携を行うことは多いですが、上手く接続されないこともままあります。そのときはまずWindowsファイアウォールの設定を見直してみて下さい。

次ページ:
<2>入力値をUnityのライトに反映させる

その他の連載