Unity3d 入門 08 「関節」

今回はオブジェクトの関節について説明します。
オブジェクトが関節を持つことで、動きをより多彩にすることができます。

まず、オブジェクトを用意します。
メニュー GameObject > Create Other > Capsule からカプセルを3つ、
Sphere から球を1つ作ります。

説明のために、下から Capsule1, Capsule2, Capsule3, Sphere4 とします。
続いて、Capsule1 に Rigidbody コンポーネントを貼り付け、
Capsule2, Capsule3, Sphere4 に メニュー Component > Physics 内の Character Joint を貼り付けます。
関節にも色々なものがありますが、Character Joint が2軸関節で色々使い勝手が良いです。
この関節の設定はコンポーネントを貼るだけでは不十分で以下のように設定を行います。
1.親となる Rigidbody コンポーネントを持つオブジェクトを
Inspector 内の Character Joint > Connected Body 要素にドラッグします。
例えば、Capsule2 の Connected Body には、Capsule1 をドラッグします。

2.Anchor 要素では、回転軸の中心を指定します。
例えば、Capsule1 と Capsule2 との間に中心が来るように、Capsule2 の Anchor は (x,y,z)=(0,-1,0) に設定します。
下の図の赤枠で囲んだ、オレンジ・緑の軸がこの関節の回転軸です。

これを、Capsule3, Sphere4 にも同じように設定します。


さっそく、このオブジェクトを図のように傾けてみます。

そして、ゲームを実行します。
少しクネクネして床に落ちました。

本当に関節になっているのか分かりにくいですね?
では、Sphere4 の Rigidbody コンポーネントの Is Kinematic 要素にチェックを入れ、
再び、ゲームを実行します。
矢印の Sphere4 だけが固定された状態で、他のオブジェクトが揺れるようになり、床には落ちなくなりました。
確かに関節になってるのが分かります!

また、Capsule1 の Rigidbody コンポーネントの Is Kinematic 要素にチェックを入れ、
ゲームを実行します。
今度は、矢印の Capsule1 だけが固定された状態で、他のオブジェクトがフラフラするようになりました。


この Is Kinematic は何なのでしょうか?
これにチェックを入れることで、
そのオブジェクトだけ、重力などの外力を一時的に無効にすることができます。
では、これは何のために役に立つのでしょうか?
答えは、次回へと続く、アニメーションなどの設定する時に役に立ちます。
腕を振る、足を上げるなどの、アニメーションを実行している間、
Is Kinematic を有効にすることで外力を無効にします。
こうすることで、意図どおりのアニメーションを実行することができます。
一方、アニメーションが終われば、Is Kinematic を無効にすることで、
外力からの作用を受けるようにします。
このように、関節は様々なコンポーネントと合わせて使うことでより、
真価を発揮します。