強火で進め このページをアンテナに追加 RSSフィード

整理された情報は こちら へどうぞ。

2011年08月07日

[][]UnityでOSC(OpenSound Control)を使う方法

D

こちらのUnity 3.4で追加されたジャイロを使ったサンプルプログラムの動画でOSC(OpenSound Control)が使われているのを見て、「そう言えばUnityでOSCを使った様な動画見かけたなぁ」「前回参加したGame hack-a-thon #4でUnityでOSC使ってた人いたなぁ」というのを思い出し、それをきっかにUnityでOSCを使う方法を調べてみる事にしました。

サンプルを探す

検索してみた所、フォーラムのこちらにてサンプルコードを公開されている方を見つけました。

MIDI or OSC for Unity Indie users?

http://forum.unity3d.com/threads/16882-MIDI-or-OSC-for-Unity-Indie-users

沢山のソースコードが公開されていますが今回は unityosc3_753.zip というサンプルを使いました。

usingの部分でエラーが出ていましたがこちらのブログを参考に using System.IO; に変更した所、無事実行できました。

SuperCollider + Unity3d - sc3onlinuxの日記

http://d.hatena.ne.jp/sc3onlinux/20110528/1306573637

OSCのコントローラ用のアプリを探す

今回、コントローラはiPhoneを使おうと思ったのでOSCアプリを検索。こちらでいくつか紹介されていました。

iPhoneをリモコンにしてみる(2/4)- @IT

http://www.atmarkit.co.jp/fsmart/articles/input01/02.html

こちらのページや他のサイトなどを見ていると有料ですが TouchOSC というアプリが評判が良さそうなのでこちらを購入しました。もちろん、他のアプリでも操作出来るかと思いますが今回はこちらのアプリを使った場合の使い方の解説となります。

OSCがやり取りしているデータをチェックする方法を探す

自分はOSCは名前知っているけど一切使った事が無い状態でした。

まずはOSCがどの様なデータをやり取りするのかをチェックする事にしました。

チェックに使える無料のOSCアプリなどが有ったら良かったのですが見つからなかった為にProcessingで出来ないか調べてみました。

実はそれが前回のエントリーの元ネタだったります。

ProcessingでOSC(OpenSound Control)を使う方法 - 強火で進め

http://d.hatena.ne.jp/nakamura001/20110807/1312725476

TouchOSCの設定方法

Processing側の話の前にTouchOSCの設定方法について簡単に説明しておきます。

TouchOSCを起動するとこの様な画面が表示されます。OSCの部分で接続先の設定を行います。

f:id:nakamura001:20110808021742p:image

今回はMacとTouchOSC間でアクセスする為、Macで現在のIPをこちらで紹介されている様な方法で取得(まぁ、ターミナルで ifconfig コマンドで確認しても良いですが…)し、「HOST」に記述します。

f:id:nakamura001:20110808021820p:image

TouchOSCのインターフェイスは色々なものが使えますが今回は「Beatmachine」を使いました。

f:id:nakamura001:20110808022006p:image

右上の「Done」ボタンを押すとコントローラが表示されます。

OSCがやり取りしているデータをチェック

ProcessingでoscP5というライブラリをインストール後、付属の oscP5sendReceive.pde というサンプルでデータのチェックしました。

TouchOSC で適当にボタンを押すと以下の様なデータが送られているのが確認出来ました。

### received an osc message. addrpattern: /1/recenable typetag: f
### received an osc message. addrpattern: /1/recenable typetag: f
### received an osc message. addrpattern: /1/input typetag: f
### received an osc message. addrpattern: /1/input typetag: f
### received an osc message. addrpattern: /1/solo typetag: f
### received an osc message. addrpattern: /1/solo typetag: f

Unityのサンプルの設定

自分がUnityでOSCを使うのはTouchOSCをコントローラにしてUnity上のオブジェクトを操作する様なシチュエーションを想定しているのでシーンビューの OSCEmpty にデフォルトで設定されている OSCTestSender.cs を削除し、代わりに OSCReceiver.js を追加して以下の様な構成にしました。

f:id:nakamura001:20110808023605p:image

Inspectorの OSCReceiver (Script) の「Remote IP」にはTouchOSCの「HOST」に設定したのと同じIPを指定。「Send To Port」「Listener Port」はそれぞれTouchOSCの「Port (incoming) 」と「Port (outgoing) 」の値を設定します。

UnityのサンプルでProcessingで確認した様なデータと同様な記述が有るのは OSCReceiver.js の以下の記述でした。

	handler.SetAddressHandler("/1/toggle1", Example1);
	handler.SetAddressHandler("/1/toggle2", Example2);

メソッドの内容を確認した所、 /1/toggle1 などに送られたデータを処理するメソッドを Example1 と指定している様です。

ここで指定されている /1/toggle1 や /1/toggle2 はTouchOSCでは左上のココに割り当てられていました。

f:id:nakamura001:20110808022856p:image

上が toggle1 下が toggle2 です。

プログラムを実行してこれらのボタンをタップするとUnityのConsoleにてデータを受け取っている事が確認出来ました。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト

コメントを書くには、なぞなぞ認証に回答する必要があります。

トラックバック - http://d.hatena.ne.jp/nakamura001/20110807/1312739099