Configurable Joints (自由設定ジョイント) は、他の ジョイントタイプ の機能をすべて合わせ、キャラクターの動きをより細かく制御します。ラグドールの動きをカスタマイズしたり、キャラクターに特定のポーズを取らせたい場合に特に有効です。また、ジョイントを独自にデザインしたかなり特殊なジョイントに適応させることもできます。
プロパティ | 機能 | |
---|---|---|
Edit Joint Angular Limits | シーンビューに、ジョイントの角度制限を編集するためのギズモを追加します。このギズモを使用するには、Angular X, Y, Z Motion を Limited に設定するとハンドルが表示され、ジョイントの回転空間をドラッグして調整できます。 | |
Connected Body | ジョイントが接続する Rigidbody オブジェクト。None に設定すると、ジョイントは別の Rigidbody にではなく空間内の任意の固定位置に接続します。 | |
Anchor | ジョイントの中心を定義する点です。すべての物理ベースのシミュレーションでは、この点を中心として計算を行います。 | |
Axis | 物理特性シミュレーションに基づいて、オブジェクトの自然な回転を定義するローカルの軸。 | |
Auto Configure Connected Anchor | これを有効にすると、接続されるアンカーの位置が自動的に計算され、アンカープロパティのグローバルな位置と一致させます。これはデフォルト設定です。無効にすると、接続されるアンカーの位置を手動で設定します。 | |
Connected Anchor | 接続されたアンカー位置を手動で設定します。 | |
Secondary Axis | Axis と Secondary Axis は、ジョイントのローカル座標を定義します。第 3 の軸は、他の 2 つに直交します。 | |
X, Y, Z Motion | 後述の Limit 関連のプロパティに応じて、X 軸、Y 軸、Z 軸に沿った動きを、自由、ロック、制限 のいずれかに設定します。 | |
Angular X, Y, Z Motion | 後述の Limit 関連のプロパティに応じて、X 軸、Y 軸、Z 軸に沿った回転を、自由、ロック、制限 のいずれかに設定します。 | |
Linear Limit Spring | オブジェクトが制限位置を越えた場合に、オブジェクトを引き戻すためのスプリングの力。 | |
Spring | スプリングの力。制限を超えなくするには、この値を 0 にします。0 以外の値を設定すると、制限を弾力的にします。 | |
Damper | ジョイントの動きの速度に比例したスプリング力の減衰。0 より大きい値を設定すると、振動を減衰させることができます。そうでない場合は、振動は無限に続きます。 | |
Linear Limit | ジョイントの直線運動 (回転ではなく移動する距離) に制限を設定します。ジョイントの起点からの距離で指定します。 | |
Limit | 起点から制限値までの距離 (ワールド単位)。 | |
Bounciness | オブジェクトが制限距離に到達したときに、引き戻すために加えらるバウンス力を設定します。 | |
Contact Distance | 制限を適用するための、ジョイント位置と制限の間の最小の距離許容値。許容値が高いということは、オブジェクトが高速で移動するときに制限に違反する可能性が低いことを意味します。ただし、これには、物理シミュレーションで制限をより頻繁に確認する必要があり、パフォーマンスがわずかに低下します。 | |
Angular X Limit Spring | オブジェクトがジョイントの回転制限を越えた場合に、オブジェクトを引き戻すためのスプリングのトルク。 | |
Spring | スプリングのトルク。制限を超えなくするには、この値を 0 にします。0 以外の値を設定すると、制限を弾力的にします。 | |
Damper | ジョイントの回転の速度に比例したスプリングのトルクの減衰。0 より大きい値を設定すると、振動を減衰させることができます。そうでない場合は、振動は無限に続きます。 | |
Low Angular X Limit | ジョイントの X 軸を中心とした回転の下限。ジョイントの元の回転からの角度で指定します。 | |
Limit | 制限角度。 | |
Bounciness | オブジェクトの回転が制限角度に到達したときに加えらるバウンスのトルクを設定します。 | |
Contact Distance | 制限を適用するための、ジョイント角度と制限の間の最小の角度許容値。許容値が高いということは、オブジェクトが高速で動くときに制限に違反する可能性が低いことを意味します。ただし、これには、物理シミュレーションで制限をより頻繁に確認する必要があり、パフォーマンスがわずかに低下します。 | |
High Angular XLimit | 上記のプロパティ Low Angular X Limit と同様の項目ですが、こちらはジョイントの回転の下側の角度ではなく上側の角度を制限するための設定です。 | |
Angular YZ Limit Spring | 上記のプロパティ Angular X Limit Spring と同様の項目ですが、こちらは Y 軸中心の回転と X 軸中心の回転の両方に適用されます。 | |
Angular Y Limit | これは、前述の Angular X Limit プロパティと似ていますが、制限をY軸に適用し、上限と下限の両方の角度制限を同じとみなします。 | |
Angular Z Limit | これは、前述の Angular X Limit プロパティと似ていますが、制限を Z 軸に適用し、上限と下限の両方を同様とします。 | |
Target Position | ジョイントの駆動力が向かうターゲット位置。 | |
Target Velocity | その駆動力でジョイントがターゲット位置に移動する速度。 | |
XDrive | Position Spring と Position Damper の駆動トルクによって、ジョイントがローカル X 軸の周りを回転するために使用する力を設定します。Maximum Force パラメーターは、力を制限します。このプロパティは、Rotation Drive Mode プロパティが X & YZ に設定される場合にのみ使用できます。詳細については、Drive force のセクションを参照してください。 | |
Position Spring | ジョイントを現在の位置からターゲット位置に回転させるために使用するスプリングのトルク。 | |
Position Damper | ジョイントの現在の速度とターゲット速度の違いに比例させてスプリングのトルクを減衰します。これにより、ジョイントの動きの速度が低下します。0 より大きい値を設定すると、ジョイントが振動を減衰できるようにします。そのように設定しないと、振動は無期限に継続します。 | |
Maximum Force | 駆動が適用できる力の大きさを制限します。駆動に計算された力を適用するには、この値を駆動が計算しそうにない高い値に設定します。 | |
YDrive | 前述のプロパティ X Drive と同様の項目ですが、こちらはジョイントの Y 軸に適用されます。 | |
ZDrive | 前述のプロパティ X Drive と同様の項目ですが、こちらはジョイントの Z 軸に適用されます。 | |
Target Rotation | ジョイントの回転ドライブが回転する方向。クォータニオン で指定します。ターゲットの回転は、Swap Bodies パラメーターが設定されていない限り、ジョイントが接続されているボディを基準にします。設定されている場合は、接続されているボディのアンカーを基準にします。 | |
Target Angular Velocity | ジョイントの回転動力が達成しようとする角運動速度。ベクトルで指定します (ベクトルの長さが回転速度、方向が回転軸)。 | |
Rotation Drive Mode | オブジェクトをターゲットとする方向に回転させるために、どのように動力を加えるかを設定します。モードを X and YZ に設定すると、後述の Angular X/YZ Drive プロパティで指定された軸周りのトルクを適用することができます。Slerp モードを使用する場合は、Slerp Drive プロパティでドライブトルクを決定します。 | |
Angular X Drive | このプロパティは、駆動トルクがジョイントをローカルの X 軸周りに回転させる方法を指定します。このプロパティは、前述の Rotation Drive Mode プロパティが X & YZ に設定されている場合にのみ利用可能です。詳細については、駆動力 セクションを参照してください。 | |
Position Spring | ジョイントを現在の位置からターゲット位置に回転させるために使用するスプリングのトルク。 | |
Position Damper | ジョイントの現在の速度とターゲット速度の違いに比例させてスプリングのトルクを減衰します。これにより、ジョイントの動きの速度が低下します。0 より大きい値を設定すると、ジョイントが振動を減衰できるようにします。そのように設定しないと、振動は無期限に継続します。 | |
Maximum Force | 駆動が適用できる力の大きさを制限します。駆動に計算された力を適用するには、この値を駆動が計算しそうにない高い値に設定します。 | |
Angular YZDrive | 前述のプロパティ Angular X Drive と同様の項目ですが、こちらはジョイントの Y 軸と Z 軸に適用されます。 | |
Slerp Drive | このプロパティは、駆動トルクがジョイントをローカルのすべての軸周りに回転させる方法を指定します。このプロパティは、前述の Rotation Drive Mode プロパティが Slerp に設定されている場合にのみ利用可能です。詳細については、Slerp Drive セクションを参照してください。 | |
Position Spring | ジョイントを現在の位置からターゲット位置に回転させるために使用するスプリングのトルク。 | |
Position Damper | ジョイントの現在の速度とターゲット速度の違いに比例させてスプリングのトルクを減衰します。これにより、ジョイントの動きの速度が低下します。0 より大きい値を設定すると、ジョイントが振動を減衰できるようにします。そのように設定しないと、振動は無期限に継続します。 | |
Maximum Force | 駆動が適用できる力の大きさを制限します。駆動に計算された力を適用するには、この値を駆動が計算しそうにない高い値に設定します。 | |
Projection Mode | このプロパティは、ジョイントが (物理エンジンがその時点での力の組み合わせをシミュレーション内にまとめられないことによって) 予期せず制限を越えた場合に、それがどのようにスナップして制限値に戻るかを設定します。オプションには None と Position and Rotation があります。 | |
Projection Distance | 物理エンジンが許容位置にジョイントをスナップして戻す前に必要な、ジョイントが制限を超過する距離。 | |
Projection Angle | 物理エンジンが許容位置にジョイントをスナップして戻す前に必要な、ジョイントが制限を超過して回転する角度。 | |
Configured in World Space | このプロパティを有効にすると、様々なターゲットや動力のプロパティで設定された値を、オブジェクトのローカル空間ではなく、ワールド空間で計算します。 | |
Swap Bodies | このプロパティを有効にすると、物理エンジンがジョイントに関わるリジッドボディを処理する順番が入れ替わります。この結果、ジョイントの動きが変わりますが、リジッドボディやアンカーには影響がありません。 | |
Break Force | この値よりも大きな力がジョイントの制約を超えてジョイントを押すと、ジョイントは永久に “壊れた” 状態で削除されます。Break Torque は、軸が Limited または Locked の場合にのみジョイントを壊します (後述の 動きの制約 を参照)。 | |
Break Torque | この値よりも大きなトルクがジョイントの制約を超えてジョイントを回転させると、ジョイントは永久に “壊れた” 状態で削除されます。Break Force は、軸が Free、Limited、Locked の場合にのみジョイントを壊します (後述の 動きの制約 を参照)。 | |
Enable Collision | このプロパティを有効にすると、ジョイントを持つオブジェクトが接続されているオブジェクトと衝突するようになります。これを無効にすると、ジョイントとオブジェクトはお互いに通過します。 | |
Enable Preprocessing | これが無効になっていると、ジョイントにある “不可能な” 設定がされている場合に、より安定性が保たれ、ひどく制御できない動きが起こりにくくなります。 | |
Mass Scale | リジッドボディの反転した質量と慣性テンソルに適用するスケールで、0.00001 から無限大までの範囲で設定できます。これは、質量が大きく違う 2 つのリジッドボディをジョイントで接続する際に便利です。接続されたリジッドボディの質量が近いと、物理ソルバーはより良い結果を出します。接続されたリジッドボディの質量が異なる場合は、このプロパティと Connect Mass Scale プロパティを使用して、偽の質量を適用して互いにほぼ等しくなるようにします。これにより、高品質で安定したシミュレーションが可能になりますが、リジッドボディの物理的な動作は少なくなります。 | |
Connected Mass Scale | 接続されているリジッドボディの反転した質量と慣性のテンソルに適用するスケールで、0.00001 から無限大の範囲です。 |
他のジョイントと同様に、Configurable Joint (自由設定ジョイント) はオブジェクトの動きを制限するために使用できますが、ターゲットの速度や位置に駆動するためにも使用できます。設定オプションの数が多いので、思い通りの動作をさせるためにはいろいろと試してみる必要があります。
X, Y, Z Motion と X, Y, Z Rotation プロパティを使用すると、並進運動や各軸を中心とした回転の動き両方に制約をかけることが可能です。Configured In World Space を有効にすると、動きはオブジェクトのローカル軸ではなく、ワールド軸に対して制約されます。これらのプロパティは、Locked、Limited、Free のいずれかに設定可能です。
ジョイントがその起点から移動できる最長距離を定義する Linear Limit プロパティを使用すると、並進運動に制限をかけることができます。これは、各軸に沿って別々に測定されます。例えば、エアホッケー台のパック (平円盤) のジョイントを、Y 軸 (ワールド空間) では Locked、Z 軸では Free、X 軸では台の幅に合うように Limited に設定すれば、パックの動きがプレイエリアからはみ出さないように制約されます。
また、Angular Limit (角度制限) プロパティを使えば回転の動きにも制限をかけることができます。角度制限は直線の制限と違って、各軸ごとに異なる制限値を設定することができます。また、X 軸の回転角度に関しては上限と下限で異なる値を設定できます。その他 2 つの軸では、元の回転のいずれの側にも同じ角度を使用します。例えば、1 枚の平らな板に、X 軸と Z 軸方向はわずかに傾斜可能にして Y 軸回転をロックしたジョイントを付け、“シーソー台” を作ることもできます。
デフォルトでは、ジョイントは限界に達すると動きを止めます。しかし、このような非弾性衝突は現実世界では稀なので、拘束されたジョイントにバウンスの感覚を加えると便利です。制約されたオブジェクトが限界に達した後に跳ね返るようにするには、リニアと角度の制限の Bounciness プロパティを使用します。ほとんどの衝突は少量のバウンスでより自然に見えますが、このプロパティを高く設定して、ビリヤード台のクッションのように異常に跳ね返る境界をシミュレートすることもできます。
ジョイントの制限をさらに和らげるには、スプリングのプロパティを使用します。並進用の Linear Limit Spring と、回転用の Angular X/YZ Limit Spring です。Spring プロパティに0 より大きい値を設定すると、ジョイントが限界に達したときに突然動きが止まるのではなく、スプリングの力で限界の位置に引き戻されます。この力の強さは、 Spring 値によって決まります。デフォルトでは、スプリングは完全な弾性を持ち、ジョイントを衝突とは反対の方向に跳ね返します。
Damper プロパティを使用すると、弾力性を減らしてジョイントをより穏やかに限界まで戻すことができます。例えば、スプリングジョイントを使用して、左右に引っ張ることができるレバーを作成することができますが、その後、直立した位置にスプリングで戻ります。バネが完全な弾性体であれば、レバーを放した後、中心点を中心に前後に振動します。ただし、十分な減衰を加えれば、スプリングは速やかに中立位置に落ち着きます。
ジョイントは、取り付けられているオブジェクトの動きに反応するだけでなく、Drive (駆動) 力を積極的に加えてオブジェクトを動かすことができます。ジョイントによっては、ファンブレードを回すロータリーモーターのように、オブジェクトを一定の速度で動かし続ける必要があります。Target Velocity と Target Angular Velocity プロパティを使用して、このようなジョイントに必要な速度を設定します。
空間の特定の位置や特定の方向に向かってオブジェクトを動かすジョイントを使用する必要とすることがあります。この機能を設定するには、 Target Position と Target Rotation プロパティを使用します。例えば、フォークリフトを実装するには、自由設定ジョイントにフォークをマウントし、ターゲットの高さを設定して、スクリプトでフォークを持ち上げます。
ターゲットが設定されると、 X, Y, Z Drive と Angular X/YZ Drive (または代替として Slerp Drive) プロパティで、ジョイントをターゲットに向かって押し出すための力を指定します。Drive の Mode プロパティは、ジョイントがターゲットとする位置、速度、またはその両方を求めるかどうかを選択します。 Position Spring と Position Damper は、ターゲット位置を求めるときのジョイントの制限と同じように動作します。速度モードでは、スプリングの力は、現在の速度とターゲット速度の間の “距離” に依存します。Damper (減衰させる要素) は、速度が選択された値付近で延々と振動するのではなく、その値に落ち着くのを助けます。例えば、XDrive の力の計算式は以下のとおりです。
force = PositionSpring * (target position - position) + PositionDamper * (targetVelocity - velocity)
つまり、力は現在値とターゲット値の差に比例して大きくなり、現在の速度とターゲット値の差に比例して減衰させる要素によって削減されます。Unity は、位置駆動と回転駆動の両方に力を適用します。
Maximum Force プロパティは、ジョイントがターゲットからどれだけ離れているかに関わらず、スプリングによって適用される力が制限値を超えないようにするための最終的な調整です。これにより、ターゲットから遠く離れた場所に伸ばしたジョイントが、制御不能な方法でオブジェクトを急激にスナップして引き戻すことを防ぎます。
任意の駆動力 (後述の Slerp Drive を除く) を使用する場合、ジョイントは各軸で別々にオブジェクトに力を加えます。例えば、前方への飛行速度は大きいが、横方向への操舵速度は比較的小さい宇宙船を実装することができます。
各軸に個別に力が適用される他の動力モードと異なり、Slerp Drive は、ジョイントの方向付けを行うのにクォータニオンの “Slerp” 機能と呼ばれる球状補間を使用します。Slerp 処理は、各軸を個々に扱うのではなく、オブジェクトが現在の方向からターゲットの方向に向けるのに必要な最小の総回転を求め、それを必要に応じて全軸に適用します。Slerp 動力は設定が比較的簡単ですが、X 軸と Y/Z 軸に異なる動力を指定することができません。
Slerp 動力を有効にするには、 Rotation Drive Mode プロパティを X and YZ から Slerp に変更してください。ジョイントは、 Angular X/YZ Drive の値か Slerp Drive 値のどちらかを使用できますが、両方を使用することはできません。