Unityを使うことが増えてきた今日この頃、みなさんいかがお過ごしでしょうか。
主要なDepthセンサーは、ほぼUnity対応が行われており、Kinect SDK v2もUnity対応されることになりました。
Kinect v1については公式なUnityパッケージがないのですが、(おそらく)有志の手によって作成されたUnityパッケージがあったので紹介します。「ユニティちゃんをKinect for Windows v1」で動かすで使ったものです。
なお、このパッケージのライセンスは今のところ僕のほうでは把握してないので、取扱いは自己責任でお願いします。またUnityはPro版でしか確認していませんが、Free版でも動くんじゃないかとは思います。
こちらも併せて参照してください。
使い方の解説(簡易)
このパッケージを追加したいUnityプロジェクトを開いた状態で、こちらからダウンロードしたZIPを解凍してできた「Kinect1.7UnityPackage.unitypackage」を開きます。
インポートするパッケージの内容を聞かれますので、そのままの状態でインポートします。
Projectビューの「Assets\Scene\KinectSample.unity」がサンプルのシーンです。Kinectを接続してこれを実行すると、3Dモデルの操作、カラー、Depthの表示、スケルトンの位置表示ができます。
ざっくり見てみましょう。
Kinectの機能はKinectPrefabにあります。本来はPrefabフォルダにあるようですが、見つからないので、他のプロジェクトで使うときにはこのPrefabごとコピペして使っています。
なお、エミュレーター機能も持っているようで、記録したKinectのデータを再生できます。
再生はDeviceOrEmulatorスクリプトのUseEmulatorにチェックをいれます。これでKinectが接続されていなくても動きを再生できます。再生するファイルはKinectEmulatorスクリプトのInputファイルになります。
記録はKinectで実行中にF10を押します。これで記録が開始されます。再度F10を押すと記録が終了します。なお、終了時にファイルへの書き込みが行われるので、2回目のF10を押す前にプログラムを終了させると記録されません。デフォルトでは上記InputファイルのAssets/Recordings/playback0が上書きされます。
モデルの動作です。
動かしたいモデルに「Assets\Script\Kinect\KinectModelControllers」にある「KinectModelControllerV2.cs」スクリプトを追加します。続いてInspectorビューの「Kinect Model Controller V2」にモデルの設定をします。Swにプレファブを、それぞれのジョイントに対応するボーンを設定します。なおCollar(襟)というのがあるのですが、対応がよく分からず。とはいえ、設定しないと動かないので、Sholderを入れておきました。
続いてカラーデータの表示です。Planeなど表示させたいものに「Assets\Script\Kinect\KinectImgControllers」にある「DisplayColor.cs」を追加します。モデルと同じように「Dev Or Emu」にプレファブを追加します。
Depthデータの表示はカラーデータと同じです。Planeなど表示させたいものに「Assets\Script\Kinect\KinectImgControllers」にある「DisplayDepth.cs」を追加し、「Dev Or Emu」にプレファブを追加します。
ほかにもスケルトンの表示などあります。基本的にすべてソースが提供されていますので、読めば何とかなるでしょう。。。