2つのGameObjectをつなぐ(Joint)
Rigidbodyの物理属性が与えられたGameObject同士を結ぶ機能としてジョイント(Joint)があります。
これは、AddComponentでのPhysics内で
- Fixed Joint
- Hinge Joint
- Spring Joint
の3つが用意されています。
他にCharacter Joint/Configurable Jointというのもありますが、2つのGameObject間の挙動よりも複雑なため、ここでは割愛。
Jointを使用するには、個々のGameObjectでRigidbodyの指定をしておく必要があります。
ジョイントの種類
ジョイントの概念を図式化します。
ジョイントを割り当てた場合、その2形状同士での衝突判定は行われない?やり方があるのかもしれませんが、まだ未調査。
Fixed Joint
2つのGameObjectを不動として結び付けます。
Hinge Joint
2つのGameObjectを、条件にしたがって可動するように結び付けます。
Hingeの名のとおり、ドアのチョウツガイのような表現に向いています。
指定のローカル軸を基準として回転を加えることができます。Hingeでは、GameObject間の距離は変化しません。
パラメータとしては「Spring」「Motor」「Limits」があります。
Spring Joint
2つのGameObjectを、距離可変で結び付けます。
バネを仕込んだように動作します。
2形状間の距離を、指定の距離範囲内で伸縮させたような挙動をしますが、軸固定には1つのSpring Jointだけではできないような感じではありました。
AとBの2つのGameObjectをSpring Jointでつなぐ場合は、A/Bの2つ両方ともにSpring Jointをコンポーネントとして割り当てると、それっぽい挙動をするようです。
割り当て方
ここでは「Capsule_j1」「Capsule_j2」「Capsule_j3」の3つのCapsule形状を配置して、Capsule Colliderをそれぞれ割り当てました。
「Capsule_j2」に「Fixed Joint」のコンポーネントを追加し、Connected Bodyに「Capsule_j1」を指定(Hierarchyからこの枠にドラッグして割り当てられます)。
「Capsule_j3」に「Fixed Joint」のコンポーネントを追加し、Connected Bodyに「Capsule_j2」を指定。
これで、Capsule_j1、Capsule_j2、Capsule_j3は数珠繋ぎになったことになります。
ただし、Fixed Bodyの場合は接合部は不動です。
Hinge Joint (チョウツガイのような動き)
ドアのチョウツガイのような動きをさせる場合、標準で用意されているCubeを使用してもうまくいかず(Unity 4.3.4)。
試行錯誤してみると、
- 開閉する箇所(回転軸)が原点位置にきている形状を使用
- Hinge Jointの「Connected Body」はNoneにする(ワールド座標でHingeの軸を拘束)
とする必要がありました(間違ってるかもしれませんが、、、)。
以下、開閉するチョウツガイの手順になります。
ドア部分の形状を作成(Shade 3Dを使用)
下図のように、原点位置が板の端になるようにポリゴンメッシュを生成してfbx出力。
fbxをUnityにインポートし、シーンに配置
fbxをインポートしてシーンに配置します。
この際に、Positionを(0, 0, 0)にしたときに原点位置に板の端が来ることを確認。
シーン上の配置自身は、Positionが(0, 0, 0)である必要はありません。
上記画像の赤い板は、RigidBodyの指定をしていてConstraintsがPosition/RotationともにFreezeしている不動の形状。
白い板が、チョウツガイ的に動くGameObjectになります。RigidbodyとBox Colliderを割り当ててあります。
ドア部分にHinge Jointを割り当て
白い板のGameObjectのInspectorウィンドウで、「Add Component」より「Hinge Joint」を指定。
以下のようにパラメータ設定しました。
「Connected Body」はチョウツガイ表現の場合はNoneである必要がある?ここに、既存のRigid bodyの形状を指定すると、Limitedの回転制限が無効になってしまいました。
「Anchor」はHingeの回転の中心(ローカル座標値)。チョウツガイの挙動をさせる場合は(0, 0, 0)である必要がある?
「Axis」は回転軸になります(ローカル座標値)。Sceneビューでワイヤーフレーム表示させると、オレンジ色の矢印が見えます。
これが、チョウツガイの軸に沿うように指定します。
「Use Spring」をOnにすることで、チョウツガイが可動後に元に戻る力が働きます。
「Spring」はバネの強さ、「Damper」が大きい値になるほどバネによる戻る力はゆっくりになります。
「Use Limits」をOnにすることで、可動の角度を指定します。
「Min」は最小角度、「Max」は最大角度(度数で指定)。
この例では、チョウツガイの板を配置して、上から球を落として衝突させました。
球が板を押し下げて落下しています。その後、バネの力で板が元の位置に戻ります。
板に重力による自分自身を押し下げる力を与えたくない場合は、Rigid bodyの「Use Gravity」をOffにするとよいと思います。
最終更新時間:2014年05月26日 17時17分36秒