JackMasaki’s blog

掲載した記事ネタや作ったアプリ、参加したイベントレポートなどを掲載します

みんな大好き"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を選択していきます。

f:id:JackMasaki:20180208224724p:plain

最上部のCylinderのConnectedBodyは空のままで結構です。 これだけで揺れはできました。実際に動かしてみましょう。


Unity ゆれもの テスト

わーい動きました! 次に先端に刃を付けてみます。

刃のオブジェクトは適当に作ります。そこにRigidBodyとFixedJointをAddComponentしてみます。刃のConnectedBodyは最下部のCylinderです。


Unity ゆれもの テスト2

そこには飛び回る元気な刃ちゃんが! ということでノンプログラミングで実装できました。

HTC Viveなどで利用する際にはCameraRig内のControllerと掴んだGameObjectをつないであげればいい感じです。 Contorollerに少し広めにColliderを付けてあげてTriggerで取得しGripボタンに仕込んであげると超いい感じです。

今週のなんか作ってみたコーナー

Kinectv2とUnityを使用して背景を抜いてグリーンバックを合成し、動画編集ソフトで合成したのでしたちゃんちゃん。