>   >  Unityでつくるインタラクティブコンテンツ:第15回:タッチテーブルをつくる
第15回:タッチテーブルをつくる

第15回:タッチテーブルをつくる

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




その他の連載