こんにちは
山形大学VR部のとこやまです。
前回はアセットAzure Kinect Examples for Unityの1つであるAvatarDemoのサンプルシーン4つについて書かせていただきました。
今回からは同じアセットのColliderDemoの中のデモシーンColorColliderDemo・DepthColliderDemo2D・DepthColliderDemo3D・SkeletonColliderDemoについて書かせて頂こうと思います。
ColliderDemoはカメラの前の人の動きによって変化するCollider(当たり判定)を主に扱ったデモシーンです。
カメラので動くことで操作できる当たり判定はAzureKinectを使った体感ゲームを作るために必須であると考えています。
今回はそのデモシーンの一つであるColorColliderDemoについてご紹介させて頂きます。
前回の記事はこちら
-
-
『Azure Kinectのアセット、Azure Kinect Examples for Unityがすごい!!!【 AvatarDemo1・2編 】
2020年3月27日、ついに日本でもAzure Kinect Developer Kit (DK)が発売されました。 Microsoft Azure Kinect DK 以前からも販売は ...
続きを見る
-
-
Azure Kinectのアセット、Azure Kinect Examples for Unityがすごい!!!【 AvatarDemo 3・4編 】
今回は引き続き、AvatarDemo3とAvatarDemo4について説明させて頂きます。 前回の記事はこちら これらのシーンの中のスクリプトはAvatarDemo1の『AvatarControlle ...
続きを見る
Azure Kinect Examples for Unityのリンクはこちらです。
ColorColliderDemo
シーンを開くとKinectControllerといった基本的なゲームオブジェクトの他に、このシーン特有のものとして、jumperというオブジェクトが5個。
形のないゲームオブジェクトとしてHandCollidersやBackgroundImageが配置されています。
シーンをPlayするとゲーム画面にはカメラの前に配置されていたjumperに加え、Azure Kinectのカメラの映像が背景に映ります。
カメラの前に立ち、jumperに手を重ね、バーチャルタッチをすると効果音とともにジャンプします。
この手とjumperの接触はこのカメラの映像から直接判定しているわけではありません。

( このGifではBackgroundImageを非表示にしています )
このカメラの映像(Color Frames)と得られた深度の情報(Depth Frames)の二つから手の位置と、
HandCollidersの子関係であるHandColliderLeftとHandColliderRightの位置を同期させ、
その手の位置に合わせて動くHandCollidersがjumperに接触した時にjumper1-5にアタッチされている『JumpTrigger』のOnTriggerEnterメゾットによって中括弧内のコード(ジャンプのアニメーション・効果音の再生)が実行されています。
このシーン内では他にぶつかるものがないため、Tagがつけられていませんが、
ゲームやアプリ等に組み込むときはTagをつけ、それに沿ったコードを書く方が使うColliderの数を増やせると思います。
また、このシーンのHandCollidersはXY軸には動きますがZ軸には動きません。
実際にこのような体で操作するゲームを制作するときはこの方が好都合です。
奥行きを含めた判定をとってしまうと手をカメラ側に伸ばすことで判定が通り過ぎてしまうといったことが起こるので、腕の長さによってプレイヤーの立つ前後の位置が変わってしまうからです。
よって、こののような判定の方法は画面上のオブジェクトに触るゲームやアプリの開発をするときに役に立つと考えています。
このような方式の判定を使うことでモグラたたきのようなゲームが簡単に作ることが出来そうです。
BackgroundImageについて
このシーン内には背景にAzureKinectカメラからの映像を映すを持つBackgroundImageというRawImageを子関係においたゲームオブジェクトが存在しますが、
このゲームオブジェクトを使って同じ機能を他のシーンに実装したい場合に気をつけることがあります。
このAzure Kinect Examples for Unity内のスクリプトを使う時、
シーン内に『Kinect Manager』がアタッチされたゲームオブジェクト(KinectController)があることは前提ですが、
このBackgroundImageを既に『Kinect Manager』がアタッチされたゲームオブジェクトがあるシーン、
もしくは新たにゲームオブジェクトを作成して『Kinect Manager』をアタッチしたシーンにコピー&ペーストするだけでは動作しない場合があります。
その原因は『Kinect Manager』内の項目のGet Color Framesにあります。
デフォルトの状態やこのアセット内の多くのデモシーンではカメラからの映像(Color Frames)を使わないため、この項目がNoneになっています。
(実際に前回の記事のAvatarDemo1-4も全てNoneになっていました。)

(『Kinect Manager』をアタッチした時のデフォルトの状態 Get Color FramesがNoneになっている)
カメラからの映像を使った開発をするときは最初にこのGet Color FramesをNoneからColor Textureにすることをお勧めします。
また、今回のColorColliderDemoの場合はColor FramesとDepth Framesの二つからHandCollidersを操作するため、
Get Color Framesの下にあるチェックボックスのSync Depth and Colorにチェックが入っていますが、
カメラの映像(Color Frames) がボディトラッキングなどに使われる深度の情報(Depth Frames)へ影響してほしくない場合、チェックボックスを外した状態にする必要があります。
まとめ
ColorColliderDemoはColliderDemoの中でも唯一、Color Framesを使うデモシーンです。
このシーンでは体に合わせて動くHandCollidersの動きが平面的にであるものの、トラッキングの精度はDepth Frames単体で動かすよりも高くなっていると思います。
次回の記事では残りのColliderDemoの
- 深度から2次元的な動きの当たり判定を出すDepthColliderDemo2D
- 深度から3次元的な動きの当たり判定を出すDepthColliderDemo3D
- 骨格に沿った当たり判定を動かすSkeletonColliderDemo
について書いていきます。
是非、そちらもよろしくお願いします。
Azure Kinect Developer Kit (DK)の購入はアマゾンやマイクロソフト ストア オンラインからできます。
Microsoft Azure Kinect DK をAmazonで購入する