Articulation Body (連結ボディ) を使うことによって、ゲームオブジェクトを使ったロボットアームやキネマティックチェーンのような 物理連結 を構築することができます。これらは、産業用アプリケーションのシミュレーションのコンテキストでリアルな物理動作を得るのに役立ちます。
連結ボディは、RigidBody や 通常のジョイント といった従来の構成で定義されるプロパティを、1 つのコンポーネントで定義することができます。ただし、これらのプロパティは、階層内のゲームオブジェクトの位置に依存します。
Articulation Body プロパティは、大きく分けて以下のように分類されます。
物理環境に対する 連結ボディの応答方法を定義します。
プロパティ | 機能 |
---|---|
Mass | 連結ボディの質量 (デフォルトではキログラム単位)。 |
Immovable | このプロパティを使用して、この 連結ボディが移動可能かどうかを定義します。このプロパティは、ルートの連結ボディにのみ設定できます。このプロパティは、例えば、ロボットハンドの基本ボディを動かないようにするのに便利です。物理エンジンは他のすべての制約とは別にこれを解決し、違反していないことを保証します。 |
Use Gravity | このプロパティを使用して、重力がこの連結ボディに影響を与えるかどうかを決定します。 |
連結ボディとその親連結ボディの ジョイントアンカー の座標を定義します。
プロパティ | 機能 |
---|---|
Compute Parent Anchor | このプロパティを有効にすると、親に相対的なアンカーを現在の連結ボディのアンカーと一致させます。このプロパティを無効にすると、 Parent Anchor Position と Parent Anchor Rotation の値を別々に設定することができます。 |
Anchor Position | 現在の連結ボディに相対的なアンカーの位置座標です。 |
Anchor Rotation | 現在の連結ボディに相対的なアンカーの回転座標です。 |
Parent Anchor Position | 親連結ボディに相対的な親アンカーの位置座標です。このプロパティは、Compute Parent Anchor を無効にした場合にのみ表示されます。 |
Parent Anchor Rotation | 親連結ボディに相対的な親アンカーの回転座標です。このプロパティは、Compute Parent Anchor を無効にした場合にのみ表示されます。 |
Snap Anchor to closest contact | 親連結ボディの質量中心に最も近い、この連結ボディのサーフェスの点を計算し、そこにアンカーを設定します。Compute Parent Anchor が有効な場合、Unity はそれに応じて親アンカーも更新します。 |
現在の連結ボディとその親連結ボディをつなげるジョイントのタイプを選択し、その共通および固有のプロパティを定義します。
プロパティ | 機能 | |
---|---|---|
Articulation Joint Type | この連結ボディとその親連結ボディを接続するジョイントのタイプ。ノート: すべてのタイプのジョイントは、この表に記載されているプロパティを共通して持っていますが、特別な追加特性を持っているものもあります。 | |
Fixed | ボディ間に硬くて壊れない、伸縮しないリンクを設定します。Fixed (固定された) 連結ジョイントは、この表に記載されているプロパティ以外に追加のプロパティはありません。 | |
Prismatic | 特定の軸に沿ってスライドする以外のすべての動きをを防止します。Prismatic (プリズム) ジョイントの追加プロパティ も参照してください。 | |
Revolute | 特定の軸を中心に回転させることができます (ヒンジのようなもの)。Revolute (外旋) ジョイントの追加プロパティ も参照してください。 | |
Spherical | 2 回のスイングと 1 回のツイストが可能な解剖学的関節。Spherical (スフィア) ジョイントの追加プロパティ も参照してください。 | |
Linear Damping | リニアの減衰を制御する係数。 | |
Angular Damping | 回転の減速をコントロールする係数。 | |
Joint Friction | ジョイントの摩擦によるエネルギー損失を制御する係数。 |
プロパティ | 機能 | |
---|---|---|
Axis | プリズムジョイントが動きを許容する軸を、親アンカーに対して相対的に指定します。 | |
Motion | その軸に沿って動きの制限タイプを指定します。 | |
Free | これを選ぶと、連結ボディは親アンカーの選択した Axis (軸) に沿って自由に動けます。 | |
Limited | Drive プロパティで指定した Lower Limit と Upper Limit に従って、親アンカーの選択した Axis に沿った連結ボディの動きを制限します。 | |
X Drive, Y Drive, or Z Drive | 親アンカーの選択された Axis に従って、ジョイントに取り付けられている リニア駆動のプロパティ です。ノート: ここには Drive セクションは 1 つしかありません。そのラベルは、軸の選択に応じて自動的に変更されます。 |
プロパティ | 機能 | |
---|---|---|
Motion | 親アンカーの X 軸周りの回転制限タイプを指定します。 | |
Free | 連結ボディが親アンカーの X 軸を中心に自由に回転できるようにします。 | |
Limited | X Drive プロパティで指定する Lower Limit と Upper Limit に従って、親アンカーの X 軸を中心とした連結ボディの回転を制限します。 | |
X Drive | 親アンカーの X 軸を中心とした、ジョイントに取り付けられた 回転駆動のプロパティ。 |
プロパティ | 機能 | |
---|---|---|
Swing Y | Y 軸周りの回転制限タイプを指定します。 | |
Free | 連結ボディが親アンカーの Y 軸を中心に自由に回転できるようにします。 | |
Limited | Y Drive プロパティで指定する Lower Limit と Upper Limit に従って、親アンカーの Y 軸を中心とした連結ボディの回転を制限します。 | |
Locked | 親アンカーの Y 軸を中心とした連結ボディの回転を完全にロックします。ノート: 同時に 2 つ以上の自由度をロックすることはできません。 | |
Swing Z | Z 軸周りの回転制限タイプを指定します。オプションは 3 つの軸すべてに共通です。 | |
Twist | X 軸周りの回転制限タイプを指定します。選択肢は3軸すべてに共通です。 | |
Y Drive, Z Drive, and X Drive | それぞれ親アンカーの Y、Z、X 軸を中心とした、ジョイントに取り付けられた回転駆動のプロパティ](joint-drive-properties)。ノート: 駆動ごとに個別のサブセクションがあります。1 つの軸をロックすると、Inspector にはその Drive プロパティは表示されません。 |
特定の軸の周りの ジョイント制限 と、この軸の ジョイント駆動効果 のパラメーターを設定します。
プロパティ | 機能 |
---|---|
Lower Limit | ジョイントのタイプに応じて、ジョイントがボディの移動や回転を制限する下限。このプロパティは、関連する Motion、Swing、または Twist プロパティを Limited に設定している場合にのみ定義できます。 |
Upper Limit | ジョイントのタイプに応じて、ジョイントがボディの移動や回転を制限する上限。このプロパティは、関連する Motion、Swing、または Twist プロパティを Limited に設定している場合にのみ定義できます。 |
Stiffness | ジョイントをターゲットに引きつけるためのバネの硬さ。 |
Damping | ジョイントをターゲットに引きつけるためのバネの減衰。 |
Force limit | この駆動によって生み出される力やトルクの最大値。 |
Target | この駆動が到達することを目指すターゲット値。 |
Target velocity | この駆動が到達することを目指すターゲット速度。 |
すべての駆動は、暗示的な 1D スプリングです。この式で計算された効果 (力やトルク) を適用することで、現在の駆動パラメーターをターゲット値に近づけることを目的としています。
効果 = 剛性 * (駆動位置 - ターゲット位置) - 減衰 * (駆動速度 - ターゲット速度)
Effect = stiffness * (drivePosition - targetPosition) - damping * (driveVelocity - targetVelocity)
直線的自由度に取り付けられた駆動は、力を生み出します。回転自由度に設定された駆動は、トルクを生み出します。この式の各パラメーターは、ジョイント駆動のプロパティ で設定することができ、ジョイントに関わるすべての軸に対して希望する効果を微調整することができます。
効果の式は、バランスを取ったり、打ち消したりできる 2 つの独立した項で構成されていることに注意してください。例えば、以下のようになります。
Stiffness (剛性) を 0 にすると、特定の速度に到達することだけを目的とした駆動になります。
Damping (減衰) を 0 にすると、特定の速度に到達しようとせず、ある位置に到達することを目的とした駆動になります。この場合、ターゲットに到達しても最終的に停止しようとはしません。
アンカーは 1 つのジョイントごとに 2 つあります。
Anchor - 現在の連結ボディに相対的。
Parent Anchor - 親連結ボディに相対的。
デフォルトでは、Unity は Anchor の位置に合わせて Parent Anchor を自動的に計算します。ただし、Compute Parent Anchor プロパティを無効にすることで、Parent Anchor を手動で設定することができます。
現在、Unity エディターでは、ゲームオブジェクトのトランスフォームツールと区別するために、アンカーをスケール付きのトランスフォームツールで表示しています。
アンカーの位置を変更するには、Inspector を使って ジョイントアンカーのプロパティ を編集するか、シーンビューでそのトランスフォームツールを直接動かしたり回転させたりします。
ノート: 新しい Articulation Body を作成すると、Unity はアンカーをそれぞれのボディのローカルの 0 に配置します。ただし、ローカルの 0 は、接続されたボディにコライダーが取り付けられている場合、ジョイントがボディ同士を押し付けようとする可能性があるため、アンカーの理想的なデフォルト位置ではありません。Snap Anchor to closest contact ボタンを使用すると、多くの連結で機能する、より合理的なアンカーのデフォルト位置を設定することができます。
ノート: 現在、シーンビューではジョイントの制限を視覚化することはできますが、グラフィカルに操作することはできません。
Fixed (固定された) 関節には自由度がありません。そのため、シーンビューには特定のマーカーが表示されません。
Prismatic (プリズム) ジョイントは、実質的には親アンカーに相対的に指定された軸に沿ったスライダーです。この軸は基軸 (X、Y、Z) のみですが、親アンカーを回転 させて、ワールド空間で軸の向きを変えることができます。
プリズムジョイントには、自由または制限ありの移動を設定することができます。これを行うには、Inspector を使用して、プリズムジョイントの特定のプロパティ を編集します。
ノート: プリズムジョイントをロックすることはできません。ロックすると、その自由度が失われ、動作が不良のジョイントになるからです。
プリズムジョイントの Motion を Limited に設定すると、シーンビューに移動の制限を表すマーカーが表示されます。
小さな赤いマーカーが下限を表しています。
小さな緑のマーカーは上限を表しています。
白の点線は、制限の間の許容される移動を具体化したものです。
ジョイント制限を操作するには、Inspector を使用して、ジョイント駆動のプロパティ でその値を編集する必要があります。
制限されたプリズムジョイントの例
ノート: プリズムジョイント の Motion を Free に設定しても、シーンビューに特定のマーカーは表示されません。
Revolute (外旋) ジョイントは、基本的に親アンカーの X 軸を中心とした単一の回転自由度を持つヒンジです。親アンカーを回転 させることで、ワールド空間での軸の向きを変えることができます。
外旋ジョイントでは、回転を自由にしたり制限したりすることができます。Inspector を使用して、外旋ジョイントの特定のプロパティ を編集します。
ノート: 外旋ジョイントをロックすることはできません。ロックすると、その自由度が削除され、動作が不良のジョイントになるからです。
外旋ジョイントの Motion を Free に設定すると、シーンビューに X 軸の周りで可能な自由な回転を表す赤い円が表示されます。
Example of a free revolute joint.
外旋ジョイントの Motion を Limited に設定すると、シーンビューには回転の制限を表すマーカーが表示されます。
小さな赤いマーカーが下限を表しています。
小さな緑のマーカーは上限を表しています。
赤い部分円は、制限値の間の許容回転角度を具体化したものです。
親アンカーの Z 軸は、両方の制限角度の基準 (0) にです。
ジョイント制限を操作するには、Inspector を使用して、ジョイント駆動のプロパティ でその値を編集する必要があります。
制限された外旋ジョイントの例
Spherical (スフィア) ジョイントは、ヒューマノイドの手足を再現するのに最適な解剖学的ジョイントです。
このジョイントタイプは、最大で 3 つの回転自由度を持つことができます。これらの回転はそれぞれ自由、制限、ロックのいずれかに設定できます。これを行うには、Inspector を使用して、外旋ジョイント固有のプロパティ を編集します。
ノート: スフィアジョイントでは、すべての回転を同時にロックすることはできません。ロックすると、すべての自由度が除かれ、動作が不良のジョイントになってしまいます。また、外旋ジョイントを模倣するために、両方のスイング軸をロックするべきではありません。なぜなら、外旋ジョイントのシミュレーションは行われず、不可も高くなるからです。
外旋ジョイント と似て、以下のようになります。
シーンビューでは、色付きの円で自由回転を、色付きの部分円で制限された回転を表示します。それぞれの色 (赤、緑、青) は、その色の軸 (それぞれ、X、Y、Z) を中心とした回転を表しています。
小さい赤と緑のマーカーは、それぞれ下限と上限を表しています。
自由なスフィアジョイントの例
スイングが制限されたスフィアジョイントの例