Character Joint
Constant Force (一定力)

Configurable Joint

Configurable Joint は他のタイプのジョイントの機能をすべて包含しているため、自由にカスタマイズすることが可能です。これを使用して、既存のジョイントを少し変更したものから自分でデザインした特殊なジョイントまで、どんなものでも作成することができます。

プロパティー

プロパティー: 説明:
Connected Body ジョイントを接続するリジッドボディがアタッチされたゲームオブジェクト。None に設定すれば、ジョイントが、別のリジッドボディにではなく空間内のある位置に固定されます。
Anchor ジョイントの中心点。すべての物理特性ベースシミュレーションは、この点を計算の中心として使用します。
Axis 物理特性シミュレーションに基づいて、オブジェクトの自然な回転を定義するローカルの軸。
Auto Configure Connected Anchor 有効になっていると、Connected Anchorの位置は、Anchorのプロパティーのグローバル空間の位置に合うように自動的に計算されます。これがデフォルトの挙動です。無効になっている場合、接続されたアンカーの位置を手動で設定できます。
Connected Anchor 接続されたアンカー位置を手動で設定する。
Secondary Axis AxisSecondary Axis はともに、ジョイントのローカル座標です。第 3 の軸は、他の 2 つに対して、直角になるよう設定されます。
X, Y, Z Motion 下記にある Limit プロパティーに応じて、X 軸,Y 軸,Z 軸に沿った動きを、Free , Locked , Limited のいずれかに設定できます。
Angular X, Y, Z Motion 下記にある Limit プロパティーに応じて、X 軸,Y 軸,Z 軸を中心とした回転を、Free , Locked , Limited のいずれかに設定できます。
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 ジョイントを動力によって Target Position に向かって動かす際の目標速度。
XDrive ジョイントを、そのローカル X 軸に沿って直線的に動かす動力。
        Mode ジョイントを、指定した Position (位置) に達するまで動かすか、指定した Velocity (速度) に達するまで動かすか、その両方に達するまで動かすかを設定します。
        Position Spring ジョイントを目標位置に向かって動かす弾性力。Drive モードが Position , Position and Velocity に設定されている場合にのみ使用します。
        Position Damper ジョイントの動きの速度に比例して、弾性力を減少させます。0 を上回る値に設定すると揺れが減衰します。そうでない場合は無制限に続きます。Drive モードが Position , Position and Velocity に設定されている場合にのみ使用します。
        Maximum Force ジョイントを目標速度まで加速させるために加えられる力。Drive モードが Velocity , Position and Velocity に設定されている場合にのみ使用します。
YDrive 上記のプロパティー X Drive と同様の項目ですが、こちらはジョイントの Y 軸に適用されます。
ZDrive 上記のプロパティー X Drive と同様の項目ですが、こちらはジョイントの Z 軸に適用されます。
Target Rotation ジョイントの回転動力が回転する方向。Quaternion で指定されます。
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 に設定されているときにのみ使用します。
        Mode ジョイントを、指定した Position (位置) に達するまで動かすか、指定した Velocity (速度) に達するまで動かすか、その両方に達するまで動かすかを設定します。
        Position Spring ジョイントを目標位置に向かって回転させるバネの回転力。Drive モードが Position , Position and Velocity に設定されている場合にのみ使用します。
        Position Damper ジョイントの動きの速度に比例した、バネ回転力を減少させます。0 を上回る値に設定すると揺れが減衰します。そうでない場合は無制限に続きます。Drive モードが Position , Position and Velocity に設定されている場合にのみ使用します。
        Maximum Force ジョイントを目標速度まで加速させるために加えられる回転力。Drive モードが Velocity , Position and Velocity に設定されている場合にのみ使用します。
Angular YZDrive 上記のプロパティー Angular X Drive と同様の項目ですが、こちらはジョイントの Y 軸や Z 軸に適用されます。
Slerp Drive 回転力がすべてのローカル軸を中心にジョイントを回転させる方法。上述の Rotation Drive Mode プロパティーが Slerp に設定されている場合にのみ使用します。
        Mode ジョイントを、指定した Position (位置) に達するまで動かすか、指定した Velocity (速度) に達するまで動かすか、その両方に達するまで動かすかを設定します。
        Position Spring ジョイントを目標位置に向かって回転させるバネの回転力。Drive モードが Position , Position and Velocity に設定されている場合にのみ使用します。
        Position Damper ジョイントの動きの速度に比例した、バネ回転力を減少させます。0 を上回る値に設定すると揺れが減衰します。そうでない場合は無制限に続きます。Drive モードが Position , Position and Velocity に設定されている場合にのみ使用します。
        Maximum Force ジョイントを目標速度まで加速させるために加えられる回転力。Drive モードが Velocity , Position and Velocity に設定されている場合にのみ使用します。
Projection Mode ジョイントの動きが、(物理エンジンがその時点での動力の組み合わせをシミュレーション内にまとめられないことによって)制限を越えた場合に、それが元に戻される方法。NonePosition and Rotation に設定可能。
Projection Distance ジョイントの動きが制限を越えた場合に物理エンジンによって許容位置にジョイントが戻されるために必要な、制限からの超過移動距離。
Projection Angle ジョイントの回転が制限を越えた場合に物理エンジンによって許容位置にジョイントが戻されるために必要な、制限からの超過回転角度。
Configured in World Space 各種 Target や Drive プロパティーによって設定される値の計算を、オブジェクトのローカル空間ではなくワールド空間において行うかどうか。
Swap Bodies 有効になっていると、ジョイントの挙動が、接続されたリジッドボディ(つまりジョイントのもう一方の端)にコンポーネントが添付されている場合と同様になります。
Break Force 設定値より大きい力によってジョイントが制限外に押し出された場合、ジョイントは永久に“破壊され”、削除されます。
Break Torque 設定値より大きい回転力によってジョイントが制限を越えて回転した場合は、ジョイントは永久に“破壊され”、削除されます。
Enable Collision ジョイントのあるオブジェクトが、接続されたオブジェクトと(相互に通り抜けるのではなく)衝突できるかどうかを設定します。
Enable Preprocessing 前処理(Preprocessing)が無効になっていると、ジョイントに「無理のある」設定がされている場合に、より安定性が保たれ、収拾のつかない動きが起こりにくくなります。

詳細

コンフィグジョイントを使用すると、他のジョイント同様、オブジェクトの動きを制限したり、動力を使って目標速度や目標位置に向かってオブジェクトを動かすことが可能です。ただし、設定オプションが多数あるため、それらを組み合わせて使用する際には非常に繊細な調整が求められる場合もあります。さまざまなオプションの設定を試しながら、希望に沿うジョイントの動きを追求してください。

動きの制約

X, Y, Z MotionX, Y, Z Rotation プロパティーを使用して、並進運動や各軸を中心とした回転の動き、両方の動きに制約をかけることが可能です。Configured In World Space が有効になっている場合、それぞれの動きは、オブジェクトのローカル軸ではなくワールド軸で制約されます。これらのプロパティーは、Locked,Limited,Free のいずれかに設定可能です。

  • Locked に設定された軸は、一切の動きを許容しません。例えば、ワールド Y 軸にロックされたオブジェクトは上にも下にも動くことができません。
  • Limited に設定された軸は、下記に説明される通り、定義済みの制限同士の間における自由な動きを許容します。例えば、砲塔内にある砲弾の Y 軸回転を特定の角度範囲内に制限することで、砲弾の描く弧の形に制限をかけることができます。
  • Free に設定された軸は、どんな動きでも許容します。

ジョイントがその起点から移動できる最長距離を定義する Linear Limit プロパティーを使用すれば、並進運動に制限をかけることができます。(各軸に沿って別々に計測されます。)例えば、エアホッケー台のパック(平円盤)のジョイントを、(ワールド空間の)Y 軸では Locked、Z 軸では Free、X 軸では台の幅に合うように Limited に設定すれば、パックの動きがプレイエリアからはみ出さないように制約されます。

また、Angular Limit (角度制限) プロパティーを使えば回転の動きにも制限をかけることができます。角度制限は直線における制限と違って、各軸ごとに異なる制限値を設定することができます。また、X 軸の回転角度に関しては上限と下限で異なる値を設定できます。(その他二つの軸に関しては基本の角度の両側の同じ角度を使用します。)例えば、一枚の平らな板に、X 軸と Z 軸方向はわずかに傾斜可能にして Y 軸回転をロックしたジョイントを付け、“シーソー台” を作ることもできます。

弾み と バネ

デフォルトでは、ジョイントの動きはリミットに到達すると単純に停止するようになっています。しかし、そのような弾みのない衝突は実世界ではあまり見られませんので、制約付きのジョイントには弾み感を付加することで実世界に近づけることができます。直線や角度の制限として Bounciness (弾み) プロパティーを設定することで、制限付きオブジェクトが制限にぶつかったときに跳ね返るようにすることができます。ほとんどの衝突はわずかな弾みが加わることで自然に見えますが、例えばビリヤード台のクッションなどのような特に弾みの強い衝突物をシミュレートしたい場合は、このプロパティーの値を高くすることで対応できます。

弾みの強いジョイントは制限を越えない
弾みの強いジョイントは制限を越えない

ジョイントの制限は、Spring(バネ)プロパティーを使用することによって緩やかにすることができます。並進運動には Linear Limit Spring、回転には Angular X/YZ Limit Spring を使用します。Spring プロパティーで 0 を上回る値に設定すると、ジョイントがリミットにぶつかったときに、動きを急に停止するのではなくリミットの位置までスプリング力によって引き戻されます。(スプリング力の強さは Spring の値で決まります。)デフォルトではスプリングは完全に Elastic(弾性)で、ジョイントを勢い良く衝突の方向と逆の方向にはじき返す傾向にあります。ただし Damper プロパティーを使えば、弾力性を下げてジョイントのリミットへの戻り方をより穏やかにすることが可能です。例えば、スプリングジョイントを利用して、左右に引くことができ、引いた後に直立の位置に戻るようなレバーを作ることもできます。スプリングが完全に弾性である場合、レバーは手を離した後に中心の位置で揺れ動く傾向にあります。ただし、Damper の値を充分に設定すればスプリングは素早くニュートラルの位置に戻り停止します。

スプリングジョイントはリミットを越えますが、その後リミットに引き戻されます。
スプリングジョイントはリミットを越えますが、その後リミットに引き戻されます。

動力

ジョイントは、その付随するオブジェクトの動きに反応するだけでなく、オブジェクトを動かす 動力 を与えることもできます。例えば、扇風機を動かす回転モーターのように単純にオブジェクトを一定の速さで動かし続けるためのジョイントの場合、Target VelocityTarget Angluar Velocity プロパティーで目標速度を設定できます。また、オブジェクトを空間内の特定の位置(あるいは方向)へ動かすためのジョイントが必要な場合は、Target PositionTarget Rotation プロパティーを設定します。例えばフォークリフトの場合、フォークをコンフィグ ジョイントに取り付け、持ち上げる目標の高さをスクリプトから設定するという方法で作成することも可能です。

目標が設定されたら、X, Y, Z DriveAngular X/YZ Drive (あるいは Slerp Drive ) プロパティーによって、ジョイントをその目標に向かって動かす力を指定できます。Drive (駆動力)の Mode プロパティーで、ジョイントが目標位置(Position)を目指すのか、目標速度(Velocity)を目指すのか、その両方(Both)を目指すのか選択できます。ジョイントの制限については、Position SpringPosition Damper は、目標位置を求めるときには同様に機能します。速度モードのときは、スプリング力は現在の速度と目標速度の差によって決まります。Damper を使用すれば、速度が設定値の前後で延々と揺れ続けないように、設定値で安定させることができます。Maximum Force プロパティーは、スプリング(バネ)によって加えられた力が、ジョイントが目標からどんなに離れていても制限値を超えないようにするために最終的に微調整するものです。これにより、ジョイントが目標から遠く引き離されているときに、オブジェクトが不自然な形で急激にはじき戻されてしまうという事態を防ぐことができます。

ここで留意すべきは、(後述の Slerp Drive 以外の)いずれの動力に関しても、力は各軸に個々に適用されるということです。したがって、例えば、前進時のスピードが高速で、横に曲がるときには速度が少し落ちる宇宙船を作ることも可能です。

Slerp Drive

各軸に個別に力が適用される他の動力モードと異なり、Slerp Drive は、ジョイントの方向付けを行うのにクォータニオンの 球状補間あるいは “slerp” 機能を使用します。Slerp 処理は、各軸を個々に扱うのではなく、オブジェクトが現在の方向付けから目標の方向付けに達するのに必要な総回転の最小を取り、それを必要に応じて全軸に適用します。Slerp 動力は設定が比較的簡単で、ほとんどの用途に対応できますが、X 軸と Y・Z 軸にそれぞれ異なる動力を指定することができなくなります。

Slerp 動力を有効にするには、Rotation Drive Mode プロパティーを X and YZ から Slerp に変更してください。これらのモードは相互排他的であることにご注意ください。ジョイントは Angular X/YZ Drive の値か Slerp Drive の値のいずれかを使用し、両方を同時に使用できません。

Character Joint
Constant Force (一定力)