by @sharkattack51

July 31, 2015

OSC for Unity

ちょっと使う機会が出来たらそのうち触っておこうと思っていたOSC周りのライブラリをいろいろ漁ってみていた。 今回、正確にはTUIOを使う要件だったが、良い機会だったので下レイヤーで動いてるOSCを理解しておこうと思った。

OSC/TUIO

OpenSound Control (OSC)

https://ja.wikipedia.org/wiki/OpenSound_Control

OSCはUDP通信上のフォーマット仕様。TUIOはさらにOSCを利用してタッチ入力用に取り決められた標準仕様という理解。

  • ちなみにWindowsタッチイベントはハードウェアベンダー以外の開発者が、自由にタッチイベントを発行できなかったと思うので、そんな場合もTUIOが有効。 マルチプラットフォーム対応のタッチ開発環境には同じ仕組みで対応できるのでそちらでも有用。 最近ではTouchScriptがWin7,8/iOS/Android/TUIOで全方位カバーされているのでおすすめ。 https://www.assetstore.unity3d.com/jp/#!/content/7394

UDPを使ったソケット通信自体は過去何度も経験があったけど、 バイナリデータでやり取りしてたり、パースを毎回自前でやってたりして大分不毛だった。 同じバイナリパース処理を3つの違う言語バージョンで書いたことある。

メリットとか特徴とか

  • 言語ごとにライブラリが存在するので通信処理とデータ解析処理を自前でやらなくて良い
  • 値にアクセスするためのURIっぽい構造化されたOSCアドレスが素敵

OSCライブラリ

OSCのライブラリをいろいろ調べていてどれもいまいち使いにくい印象だった。 どのライブラリも受信データの分解まではやってくれるけど、受信データにもっと直ぐに、もっと簡単に、アクセスしたかった。あと汎用的に。

その中でこれが良い気がした。OSCアドレス指定で受信毎のコールバックが設定できる。

Rug.Osc

Simple, complete, open source OSC implementation for .NET and Mono. https://bitbucket.org/rugcode/rug.osc/overview

その上で、もうすこしUnityフレンドリーな感じで受信側のラッパークラス書いた。

Unity-OscReceiveController

https://github.com/sharkattack51/Unity-OscReceiveController

受信の値をインスペクタで確認できるようにpublic変数でやってる。 ソースファイルを増やしたくないのでインスペクタ拡張のEditorスクリプトはわりかし作らない主義です。