ラグドールウィザード
WheelCollider チュートリアル

ジョイントとラグドールの安定性

このページでは ジョイントラグドール の安定性を向上させるヒントを紹介します。

  • Angular Y LimitAngular Z Limit のジョイントの角度を小さくすることは避けてください。設定によって、角度は最小で約 5 〜 15 度で安定します。小さな角度を使う代わりに、角度を 0 度に設定すると軸がロックされ、安定したシミュレーションが行えます。
  • ジョイントの Enable Preprocessing プロパティーのチェックを外します。前処理 (Preprocessing) を無効にすると、ジョイントの制約を満たせない状況を強制された場合、ジョイントが分離したり不規則に動くのを防ぎます。ジョイントの分離や不規則な動きは、ジョイントに接続された Rigidbody コンポーネントが静的な衝突ジオメトリによって引き離される場合 (例えば、ラグドールを部分的に壁の内部に生成するなど) に、発生する場合があります。
  • 極端な状況 (ラグドールを部分的に壁の内部に生成したり、大きな力で押したりするなど) では、ジョイントソルバーは Rigidbody コンポーネントとラグドールを一緒に維持することができません。結果的にラグドールが伸びてしまいます。この問題を解決するために、 ConfigurableJoint.projectionModeCharacterJoint.enableProjection のいずれかを使ってジョイントのプロジェクションを有効にします。
  • ジョイントに接続する Rigidbody コンポーネントがぐらぐらしている場合は、PhysicsManager (Edit > Project Settings > Physics) を開き、Default Solver Iterations の値を 10 から 20 の間に増やします。
  • ジョイントに接続する Rigidbody コンポーネントが正しく弾まない場合は、PhysicsManager (Edit > Project Settings > Physics) を開き、Default Solver Velocity Iterations の値を 10 から 20 の間に増やします。
  • ジョイントで他の Rigidbody コンポーネントに接続されたキネマティックな Rigidbody コンポーネントでは、直接 Transform からアクセスしないでください。それを行うと、PhysX が対応する Rigidbody コンポーネントの内部速度を計算するステップが省かれ、ソルバーが不適切な結果を出します。一般的によく見られる悪い例は、2D プロジェクトで直接 Transform からアクセスし、リグのルートボーンの上の Transform.TransformDirection を変更してキャラクターを反転させることです。代わりに、Rigidbody2D.MovePositionRigidbody2D.MoveRotation を使用する方が、ずっと良い結果を得られます。
  • ジョイントで接続される Rigidbody コンポーネント間の質量に、極端な差を作らないようにします。ある Rigidbody の質量が他方の質量の 2 倍程度の差であれば問題ありませんが、質量に 10 倍もの差がある場合はシミュレーションは不安定になります。
  • Rigidbody やジョイントを含むトランスフォームの Scale を 1 から変更しないようにしてください。すべての場合においてスケーリングの安定性が失われます。
  • (ゲームの)世界に置くときに Rigidbody コンポーネントが重なり、その重複が避けられない場合、Rigidbody.maxDepenetrationVelocity の値を低くして、互いの Rigidbody コンポーネントがスムーズに離れるようにします。
ラグドールウィザード
WheelCollider チュートリアル