はじめに
はじめまして。都内の大学院でVRの研究をしているichita(@ichita_cs)と申します。学部までは材料系の学科にいました。
LeapMotionで3Dモデルの手を動かそうとしたら色々と詰まったので備忘録です。ポンコツなミスが目立ちますが、初学者の方の参考になれば幸いです。
参考資料
@aflkさんの記事を参考にさせて頂きました。時間が経って色々と変わっているところがあるのでそこを書き足していきます。
必要なもの
- Leap Motion Orion SDK:インストールする
- Unity Assets for Leap Motion Orion Beta:インストールしてProjectにインポート(執筆時Ver4.4.0)
- Final IK:買う($90)→インポート(執筆時Ver1.7)
やり方
シーンを開く
Assets→LeapMotion→Core→Examples→Capsule Hands (Desktop)のシーンを開く(※今回はデスクトップモードを使用)
Cubeを手の子オブジェクトにする
HandModel→RigidRoundHand_L→Palmの下にCubeを配置し、その下に更にCube(以下、子Cube)を配置する。(※利き手の逆の手に配置しないと後述のパラメータ調整でめちゃめちゃ作業しづらい。) 位置を概ねLeapMotionの手の位置に合わせる。
3Dモデルを配置
今回はこれを用いた。インポート後PrefabをSceneに配置し、Leap Motion Controllerが胸の前あたりに来るように位置を合わせる。
モデルにIKを入れる
Hierarchy内の3Dモデル(今回はBasic_BanditPrefab)に"Full Body Biped IK"のコンポーネントを追加。Right Arm→Right Hand Effector→Targetに子Cubeを適用し、Position Weight, Rotation Weightを1にする。
手の設定
再生しながら、子CubeのPositionとRotationを調整して3Dモデルの手とLeap Motionの手を合わせる。
再生を止めるとPositionとRotationが元に戻るので、再生中にInspector→Transform→Copy Componentし、再生を止めてからPaste Component Valuesする。
合わせるとこんな感じ。
指の設定
Rigged Finger
3Dモデルの指の**第三関節(根元)**にあたるGameObjectにRigged Fingerを設定し、Finger Type: TYPE_(指の名称)
Element 1: 第三関節のGameObject
Element 2: 第二関節のGameObject
Element 3: 第一関節のGameObject
を設定する。
Rigid Hand
RigidRoundHand_L→Rigid HandのElement0~4に、先ほどRigged Fingerを設定したGameObjectを適用(親指~小指の順)。
動かしてみる
再設定
Model Finger PointとModel Palm Facingの設定がまだでした。この値はモデルによって異なるようなので、再生しながら値を変えて合わせていく。(上記の画像は既に合わせてある。)
完成
今度こそ完成。なんか怪しい感じもしますが…。原因が突き止められたら追記します。
おわりに
間違いやアドバイス等あればご指摘頂けると幸いです。ありがとうございました。