Unityとの連動
●TUIO
多くのタッチインターフェイスは「TUIO」と呼ばれるプロトコルを利用して通信することができます。今回もTUIOで通信できるようにしてみました。
TUIOは通信プロトコル「OSC」の上に構築されたインターフェイスです。「タッチされた」、「移動した」、「離された」という状態をコマンドとしてやり取りします。タッチに変化がないとデータ送信が発生しません。
公式のTUIOのC#実装はUnityとは相性が悪く、ビルドするとデータを受信することができませんでした。Unityフォーラムのこちらのディスカッションを参考にして、下記の実装を使いました。
●GitHub - valyard/TUIOsharp
https://github.com/valyard/TUIOsharp
Unity側では以下のような記述で認識したデータを利用することができます。
public class MyTUIOCursor : MonoBehaviour
{
private TuioServer _tuioServer;
private Dictionary _cursorList = null;
void Start()
{
_cursorList = new Dictionary();
_tuioServer = new TuioServer();
var cursorProcessor = new CursorProcessor();
// 新しく発生した点データを受信
// カーソル情報をIDと紐づけておく
cursorProcessor.CursorAdded += (sender, e) =>
{
var entity = e.Cursor;
lock (_tuioServer) { _cursorList.Add(entity.Id, entity); }
};
// 死亡した点データを受信
// 死亡IDを削除
cursorProcessor.CursorRemoved += (sender, e) =>
{
var entity = e.Cursor;
lock (_tuioServer) { _cursorList.Remove(entity.Id); }
};
// 位置の更新、カーソルのリストは変更しなくてもいい
cursorProcessor.CursorUpdated += (sender, e) => { };
_tuioServer.Connect();
_tuioServer.AddDataProcessor(cursorProcessor);
}
}
位置データを利用するときは、以下のようにします。
foreach (var item in _tuioCursor.Cursors.Values) {
var p = new Vector3(item.X, item.Y, 0);
}
完成
認識側で指を認識してトラッキングしている様子です。
認識した情報をTUIOでUnityに送り、VFXGraphのパーティクルの発生源にしてみました。
Profile.
高田稔則/Toshinori Takata(Codelight)Codelight株式会社 代表取締役・インタラクションエンジニア
フリーランス、株式会社TBSテレビ等で映画CG制作、株式会社ソニー・コンピュータエンタテインメント(現 ソニー・インタラクティブエンタテインメント)でPS4のOSD開発などを経て2006年にCodelight株式会社を設立。インタラクティブコンテンツの制作を中核として、製造業向けのプロトタイプ開発なども行う
www.codelight.co.jp