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

JointとRagdollの安定性

ジョイントとラグドールの安定性を向上させるためのヒント。

  • “Angular Y Limit (角度 Y 制限)” と “Angular Z Limit (角度 Z 制限)” の関節の角度を小さくすることは避けてください。角度は最小で、約5〜15度で安定します。小さな角度を使う代わりに、角度を 0 度に設定すると軸がロックされ、安定したシミュレーションを実現します。

  • ジョイントプロパティー “Enable Preprocessing” を false に設定します(チェックを外す)。Preprocessingを無効にすると、ジョイントを “blowing up” (破壊)できるようになります。ジョイントの制約に応じるなんらかの方法がなく、無理な力が加った状況に追い込まれている場合、ジョイントを “blow up” できます。これは例えば、繋がれたリジッドボディが引き裂かれた場合に、静的衝突ジオメトリによって、壁の内部にラグドールが部分的に残るような形で起こるかもしれません。

  • ラグドールの安定性や伸縮性: ラグドールは、壁の内側から部分的にでてきたり、大きな力で押されるような極端な状況では、ジョイントソルバーはリジッドボディを一緒に維持することができません。これは、伸縮性や “体がバラバラな状態” をもたらします。“ConfigurableJoint.projectionMode” や “CharacterJoint.enableProjection” のいずれかを使用して、ジョイントへのプロジェクションを有効にしてください。

  • ジョイントとボディの繋がりがぐらぐらしているならば、Edit->Project Settings->Physics->“Solver Iteration Count” の値を10から20の間にしてみてください。

  • 他のボディにつなげたキネマティックボディとトランスフォームを直接使わないでください。PhysX が対応するボディの内部の速度を計算し、見苦しい結果を提供するステップをスキップできます。リグのルートの上の “transform.direction” の変更から、トランスフォームを直接参照して、キャラクタを反転するいくつかの2D のプロジェクトを見てきました。MovePosition / MoveRotation / Move を使用すると、うまく動作します。

  • ジョイントで繋がれたリジッドボディ間の、質量の極端な差を無効にします。あるリジッドボディの質量が他方の質量の2倍程度の差であれば問題ありませんが、質量に10倍差があったり、それ以上の差がある場合はシミュレーションは不安定になります。

  • リジッドボディやジョイントコンポーネントを含むトランスフォームのスケールを 1 から変更しないようにしてください。すべての場合においてスケールのロバスト性(安定性)が失われます。

  • リジッドボディをアタッチするときに、リジッドボディの重なりが避けられない場合はRigidbody.maxDepenetrationVelocity の値を低くして、互いのボディをスムーズに離します。

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