MEBIUSTOSのブログ

主にUnityに関する技術的な事を書いていきます。 Twitter @xflutexx

LeapMotion 突き抜けない手がほしい - 第1回 | Unity3D

LeapMotionでMMD4Mecanimのモデルに触りたいと思った場合、ネット上に色々情報もあるので比較的簡単に実現できます。でも、何かが違うわけです。なんで手がモデルを突き抜けちゃうん?おっぱい揉むときも細心の注意を払って座標を気にしつつ揉むなんてヤだよ!もっと簡単におっぱい!

f:id:mebius-tos:20150811103616j:plain
参考画像:おっぱい表層を突き抜け埋もれる手

突き抜けない手がほしい

突き抜けない手があれば安心しておっぱい揉めますよね?ということで、モデルを突き抜けずおっぱいにフィットする手を作っていこうと思います。完成するか否かは現時点でさっぱり分かりません。また完成しても、使い心地的に「コレじゃない」感が漂う可能性もあります。しかし男子たるもの、おっぱいの為なら頑張るべきだと思いました。
一応ヘボくても完成したら公開する予定です。

物理演算用とグラフィック用で1セット

LeapMotionのHandControllerは現実世界の手1本につき、物理演算用とグラフィック用の2つのハンドオブジェクトを生成します。物理用はColliderを搭載した不可視オブジェクト、グラフィック用はColliderなしの可視オブジェクトです。

RigidHandのColliderに注目

とりあえず、現状の手をモデルの体内に突っ込んで、物理演算用のハンドオブジェクト(RigidHand)のColliderがどんな挙動をするか見てみました。

f:id:mebius-tos:20150811125402j:plain
画像:おっぱい表層に留まるPalmのCollider

胸付近にある一番大きいColliderが手の平(Palm)です。その他のColliderは指のものです。指のColliderはバラバラで荒ぶりまくりです。しかし、PalmのColliderはほぼ毎回衝突付近に留まるという事に気が付きました。
ということは、Palmがオブジェクトと接触中はグラフィック用ハンドの位置を強制的にPalmの位置に移動してやれば・・・。

現時点での仕様案

  • 対象モデルはMMD4Mecanimにて作成したMMDモデルとする。
  • Palmがオブジェクトに接触中は、グラフィック用ハンドをPalmの位置に強制移動させる。
  • Palmがオブジェクトに接触中は、物理演算用ハンドのPalm以外のColliderを全て無効化する。
  • でもそれだとおっぱいもめない。
  • なので、Palmがオブジェクトに接触中はHandControllerを経由しない第2の物理演算用ハンドを接触中のPalmの位置に作成する。
  • 作成した第2物理ハンドの各Colliderのpositionとrotationに、無効化中の物理演算用ハンドの各Collider情報を旨いこと入れてあげる。
  • 全ての指ColliderはIsTriggerとする。(じゃないと接触時にColliderが荒ぶるので)

とりあえず、これでおっぱい揉めるんじゃないか!?( ゚∀゚)o彡゜おっぱい!おっぱい!

PalmのColliderの動きを可視化してみる

PalmのColliderの動きを可視化してみたところ、どうもおっぱい付近に留まりはするんですが、プルプルと震えます。おっぱいだからね。Colliderも緊張するよね。
でも、もうちょっと大人の落ち着きを学んでほしいので、Palmの位置と回転にVector3.SlerpとQuaternion.Slerpで追随する別の可視オブジェクトをテスト的につけてみました。それがこちら。

良いようです。色んな意味で。

接触時にこの物体の位置にグラフィック用ハンドを移動してあげればいいわけですね。

(つづく)