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