LeapMotionの手のPrefabsについて


はじめに

UnityでLeapMotionのAssetをimportしていろいろやろうとしたら,手のPrefab周りで混乱してた.今後見返すためや,同じとこで困ってる人のためにメモ程度でなんとなく記録を残す.(間違ってたらご指摘ください)

二種類のPrefab

LeapMotionのアセットにあるLeapMotion/Prefabs以下にはHandModelsNonhumanとHandModelsPhysicalがある.これらの主な違いは次の表のような感じになる.

Nonhuman Physical
指のbone等にColliderが ない ある
実行時に表示 される されない

Scenesにあるデモを見るとわかるように,この二種類の手をLeapHandControllerにアタッチされたHand Poolに指定して手の制御を行っている.わざわざ二種類用意しているのは,きっと(仮想的な)手の形に合わせて衝突判定をしてもいいことがあまりないからだと思う.

物理手の階層化

Physicalの方に属するRigidHandは各boneまで階層化されているが,NonhumanのCapsuleHandなどはそうではない.下の図はDesktop版デモのHierarchyビュー.

物理手も階層化されたものがあると便利なので,調べてみたら公式の作成チュートリアル(とても丁寧)があった.これをみながら作ることで解決.
CapsuleHandは一つのスクリプトで制御しているが,このチュートリアルに従って作成するとRigidHand/RigidFingerと同じようなオブジェクト,スクリプトの構成で物理手を作ることができる.下の図はチュートリアル終了時のHierarchyビュー.

おわりに

LeapMotionは公式のドキュメントが割と充実しているので,そこを見るだけで解決することが割とある(英語だけど).