みんな大好き"Joint"
今回はUnityでみんな大好きとっても便利な"FixedJoint"と"HingeJoint"について自分向けのメモを書いていきます。
有名なコンポーネントですが、一応紹介をしておきます。
Fixed Joint
Fixed Joints は、オブジェクトの動きを別のオブジェクトに依存するよう制限します。これは、親子関係 に若干似ていますが、トランスフォーム 階層ではなく、物理特性を通して実現されます。簡単に分解したいオブジェクトがある場合や、親子関係なしで 2 つのオブジェクトの動きをつなげたい場合などが、最適な使い道です。
Hinge Joint
Hinge Joint は、2 つの リジッドボディ をグループ化し、互いにヒンジで連結されているかのように動くよう制約します。ドアに最適ですが、鎖や振り子などをモデル化するのにも使用できます。
公式ドキュメントから引用させていただきましたが、読んだだけでワクワクしてきますね。
今回、なぜこの記事を書くことになったかというと、現在開発中の『Castle Vicinity Repel -みをていしてまもる-』でも使用されているからです。具体的にはカタパルトが発射してくる岩をキャッチした際の掴む処理に使用しています。
特にFixed JointはHTC Viveコントローラーなどで物を持つときに利用するといい感じの体験になります。
今回は簡単な揺れものを作ってみます。
Cylinderをたくさん置いてRigidBodyを付けていきます。 ツタをすべて選択し、HingeJointをAddComponentします。ConnectedBodyには選択しているCylinderの1つ上のCylinderを選択していきます。
最上部のCylinderのConnectedBodyは空のままで結構です。 これだけで揺れはできました。実際に動かしてみましょう。
わーい動きました! 次に先端に刃を付けてみます。
刃のオブジェクトは適当に作ります。そこにRigidBodyとFixedJointをAddComponentしてみます。刃のConnectedBodyは最下部のCylinderです。
そこには飛び回る元気な刃ちゃんが! ということでノンプログラミングで実装できました。
HTC Viveなどで利用する際にはCameraRig内のControllerと掴んだGameObjectをつないであげればいい感じです。 Contorollerに少し広めにColliderを付けてあげてTriggerで取得しGripボタンに仕込んであげると超いい感じです。
今週のなんか作ってみたコーナー
Unityやってるときに対話できるおっさんが右下にいてほしい… pic.twitter.com/vGBfC2DQ0D
— JackMasaki@修論審査終わりみ (@JackMasaki) 2018年2月7日
Kinectv2とUnityを使用して背景を抜いてグリーンバックを合成し、動画編集ソフトで合成したのでしたちゃんちゃん。