3D 物理演算のグローバル設定を適用するには、Physics 設定 (メインメニューで Edit > Project Settings, then select the Physics カテゴリ) を選択します。
注意2D 物理演算のグローバル設定を管理するには、代わりに Physics 2D を使用します。
物理演算の設定は、3D 物理演算のシミュレーションの精度の制限を定義します。一般的に、より正確なシミュレーションを行うと、処理のオーバーヘッドが増えます。そのため、これらの設定を使用すると、パフォーマンスと精度の相反的な要素のバランスをとることができます。
Physics パネルには、プロジェクトで使用する Physics SDK を定義するための設定が用意されています。
| 設定 | 説明 |
|---|---|
| GameObject SDK | プロジェクト内のゲームオブジェクトの物理演算シミュレーション管理に使用する SDK を定義します。デフォルトの設定は PhysX です。None に設定すると、プロジェクト内のゲームオブジェクトの物理演算シミュレーションが無効になります。 |
物理演算の設定には、Settings パネルを使用することもできます。
Settings パネルには、すべての Physics SDK の設定が含まれています。以下のタブを利用できます。
Shared タブには、すべての Physics SDK に適用するグローバルな設定が含まれています。
| プロパティ | 機能 |
|---|---|
| Gravity | すべてのリジッドボディコンポーネントに適用される重力量で、x, y, z 軸を使用して設定します。現実的な重力設定にするには、y 軸を負の数にします。重力は、ワールド単位/ (秒 ^2) で定義されます。 ノート: 重力の値を増やすと、安定した接触を維持するために Default Solver Iterations の値も増やさなければならない場合があります。 |
| Layer Collision Matrix | レイヤーベースの衝突判定システムの動作を定義します。チェックボックスをオンにして、Collision Matrix のどのレイヤーがどのレイヤーと相互作用するかを選択します。 |
GameObject タブには、プロジェクト内のすべてのゲームオブジェクトに適用されるグローバル物理演算設定が含まれています。
| プロパティ | 機能 | |
|---|---|---|
| Default Material | 個々のコライダーに物理マテリアルが割り当てられていない場合に、使用するデフォルトの物理マテリアルへの参照を設定します。 | |
| Bounce Threshold | 速度の値を設定します。衝突する 2 つのオブジェクトの相対速度がこの値より小さい場合、オブジェクトは互いに跳ね返りません。この値はジッターも減少させるため、非常に低い値に設定することは推奨されません。 | |
| Default Max Depenetration Velocity | 最大非貫通速度 (ソルバーが他のボディとのオーバーラップからボディを引き離そうとするときに設定できる速度) のデフォルト値を定義します。 | |
| Sleep Threshold | キネマティックでないリジッドボディ (物理演算システムによって制御されていないもの) がスリープ状態になる可能性があるグローバルエネルギーのしきい値を設定します。リジッドボディがスリープ状態のときはフレームごとに更新されるわけではないため、リソースの負担は少なくなります。リジッドボディの運動エネルギーを質量で割った値がこのしきい値を下回る場合、スリープの候補となります。 | |
| Default Contact Offset | 衝突判定システムが、衝突の接触判定をするために使用する距離の指定をします。この値は正の値でなくてはならず、また、0 に近すぎる値を設定するとジッターの原因になります。デフォルトでは、0.01 です。コライダーは、contact offset 値の合計値よりもこの距離が小さい場合のみ、衝突接触判定を生成します。 | |
| Default Solver Iterations | すべての物理フレームで Unity が実行するソルバープロセスの数を定義します。ソルバーは小さな物理エンジンのタスクで、ジョイントの動きや重複するリジッドボディコンポーネント間の接触の管理など、多くの物理演算の相互作用を決定します。 これはソルバー出力の質に影響します。デフォルト以外の Time.fixedDeltaTime が使用されている場合や、高度な設定が要求される場合は、このプロパティを変更することをお勧めします。通常は、ジョイントや接触に起因するジッターを低減するために使用されます。 |
|
| Default Solver Velocity Iterations | ソルバーが各物理フレームで行う速度処理の数を設定します。ソルバーが行う処理数が増えるほど、リジッドボディが跳ね返った後の流出速度の精度は高くなります。ジョイントしたリジッドボディコンポーネントで問題が発生する場合、または、ラグドールが衝突後に動きすぎる場合に、この値を増やしてください。 | |
| Queries Hit Backfaces | 物理クエリ (Physics.Raycast など) がメッシュコライダーの裏側の三角形の衝突を判定するようにしたい場合は、このオプションを有効にします。デフォルトでは、この設定は無効になっています。 |
|
| Queries Hit Triggers | Raycast、SphereCast、SphereTests などのレイが、トリガーが有効であるコライダーと交差するときに、ヒットを返すようにしたい場合は、このオプションを有効にします。個々のレイキャストは、この動作をオーバーライドすることができます。デフォルトでは、この設定は有効になっています。 | |
| Enable Adaptive Force | adaptive force を有効にするには、このオプションを有効にします。adaptive force は、積み重なったオブジェクトを通じて力を伝達する方法に影響し、よりリアルな動作が実現されます。デフォルトでは、この設定は無効になっています。 | |
| Contacts Generation | 接触の生成方法を選択します。 | |
| Legacy Contacts Generation | Unity 5.5 より前では、Unity は分離軸の定理 (SAT) に基づいた接触生成メソッドを使用していました。 PCM の方が効率的ですが、古いプロジェクトでは、物理計算を調整する必要がないため、SAT の使用を続ける方が簡単な場合があります。PCM を使用すると、バウンスがわずかに異なる場合があり、無用な接触がコンタクトバッファ ( OnCollisionEnter、OnCollisionStay、OnCollisionExit に渡される Collision インスタンスで取得される配列) に残ることが少なくなります。アップグレードのアドバイス: Unity 2018.2 以前のプロジェクトを移行するには、マニフォールド内のパッチをマージし、接触を選択するコードで動作するようにスクリプトを更新する必要があります。 |
|
| Persistent Contacts Manifold (PCM) | 物理フレームごとに少ない接触数を生成し、より多くの接触データが他のフレーム間で共有されます。PCM 接触生成パスはより正確であり、通常は、より良い衝突フィードバックを生成します。詳細は、Nvidia documentation on Persistent Contact Manifold を参照してください。 これはデフォルトの値です。 |
|
| Simulation Mode | Unity が物理演算シミュレーションを実行するタイミングを選択します。デフォルトの値は Fixed Update です。 | |
| Fixed Update |
MonoBehaviour.FixedUpdate の直後に物理演算シミュレーションを実行します。 |
|
| Update |
MonoBehaviour.Update の直後に物理演算シミュレーションを実行します。 |
|
| スクリプト | スクリプトが Physics.Simulate を呼び出すときに物理演算シミュレーションを実行します。 |
|
| Auto Sync Transforms | このオプションを有効にすると、Transform コンポーネントが変更されるたびにトランスフォームの変更を物理システムと自動的に同期させます。デフォルトでは、この設定は無効になっています。 | |
| Reuse Collision Callbacks | 衝突コールバックを再利用する場合に、有効にします。物理演算システムは Collision タイプのインスタンスを 1 つだけ作成し、個々のコールバックごとにそれを再利用します。これにより、ガベージコレクターが処理する無駄が減り、パフォーマンスが向上します。このプロパティは、デフォルトで有効になっています。 | |
| Invoke Collision Callbacks |
OnCollisionEnter、OnCollisionStay、および OnCollisionExit の MonoBehaviour 衝突メッセージを、OnCollision メソッドを実装する対応するスクリプトに送信します。このプロパティは、デフォルトで有効になっています。 |
|
| Contact Pairs Mode | 使用する接触ペアの生成のタイプを選択します。 | |
| Default Contact Pairs | キネマティック - キネマティックとキネマティック - 静的のペアを除くすべての接触のペアから、衝突とトリガーのイベントを受け取ります。 | |
| Enable Kinematic Kinematic Pairs | キネマティック - キネマティックの接触のペアから衝突とトリガーイベントを取得します。 | |
| Enable Kinematic Static Pairs | キネマティック - 静的の接触ペアから衝突とトリガーイベントを取得します。 | |
| Enable All Contact Pairs | すべての接触ペアから衝突とトリガーイベントを取得します。 | |
| Broadphase Type | 物理演算シミュレーションで使用するブロードフェーズアルゴリズムを選択します。PhysX SDK と Rigid Body Collision に関する NVIDIA のドキュメントを参照してください。 | |
| Sweep and Prune Broadphase | スィープ & プルーンブロードフェーズ衝突メソッドを使用します (つまり、1 つの軸に沿ってオブジェクトをソートすることで、離れているペアをチェックしないようにすることができます)。 | |
| Multibox Pruning Broadphase | マルチボックスプルーニングはグリッドを使用し、各グリッドセルがスイープ & プルーンを実行します。通常これは、フラットな世界に多くのゲームオブジェクトがあるような場合に、パフォーマンスを向上させるのに役立ちます。 | |
| Automatic Box Pruning | このアルゴリズムは Multibox Pruning のアルゴリズムと似ていますが、ワールドの境界と分割数を自動的に計算することもできます。一群のグリッドセルを維持し、通常のスイープ & プルーンのアプローチを使用して、重複する可能性のあるコライダーのペアを計算します。これは通常、1 つのスイープ & プルーンが多くの余分な誤検知を生成する大きなシーンで役立ちます。 | |
| World Bounds |
Multibox Pruning Broadphase アルゴリズムを使用する場合、離れたオブジェクトが互いに影響を与えないように、ワールドを囲む 2D グリッドを定義します。 このオプションは Broadphase Type を Multibox Pruning Broadphase に設定した場合にのみ使用されます。 |
|
| World Subdivisions | 2D グリッドアルゴリズムの x 軸と z 軸に沿ったセルの数。 このオプションは Broadphase Type を Multibox Pruning Broadphase に設定した場合にのみ使用されます。 |
|
| Friction Type | シミュレーションに使用する摩擦アルゴリズムを選択します。 | |
| Patch Friction Type | 低ソルバー反復回数でもっとも安定した結果をもたらす、基本的な強力な摩擦アルゴリズム。このメソッドは、タッチするオブジェクトのペアごとに最大 4 つのスカラーソルバー制約のみを使用します。 | |
| One Directional Friction Type | クーロン摩擦モデルを単純化したもので、ある接触点の摩擦は、接触の法線の交互の接線方向に適用されます。これはパッチ摩擦よりもソルバーの反復回数が多くなりますが、2 方向モデルほどの精度はありません。Articulation body がこの摩擦タイプで動作するためには、Solver Type を Temporal Gauss Seidel に設定してください。 | |
| Two Directional Friction Type | 1 方向モデルと同様に摩擦を適用しますが、両方の接線方向に同時に適用します。そのため、ソルバーの反復回数は増えますが、精度は高くなります。すべての接触点で適用されるため、多くの接触点があるシナリオではパッチ摩擦よりもコストがかかります。Articulation body がこの摩擦タイプで動作するためには、Solver Type を Temporal Gauss Seidel に設定してください。 | |
| Enable Enhanced Determinism | シーン内のシミュレーションは、(ゲームが決定的な順序でアクターを挿入するという条件で) 存在するアクターにかかわらず一貫しています。このモードでは、この追加の決定を確実にするために、パフォーマンスが多少低下します。 | |
| Enable Unified Heightmaps | このオプションを有効にすると、メッシュ衝突と同じ方法で Terrain (地形) の衝突を処理します。 | |
| Improved Patch Friction | パッチ摩擦を最適化し、静的および動的な摩擦が分析結果を超えないようにします。このプロパティはデフォルトでは無効になっています。 | |
| Solver Type | シミュレーションに使用する PhysX ソルバーのタイプを選択します。 | |
| Projected Gauss Seidel | デフォルトの PhysX ソルバー。 | |
| Temporal Gauss Seidel | このソルバーは、より良い収束と高質量比のより良い処理を提供し、貫通を修正するときに導入されるエネルギーを最小限に抑え、ジョイントのオーバーストレッチに対する抵抗力を改善します。これは通常、デフォルトのソルバーでシミュレーション中に不安定な動作が発生した場合に役立ちます。 | |
| Default Max Angular Speed | すべての動的リジッドボディゲームオブジェクトのプロジェクト全体のデフォルトの最大角速度を、ラジアンで設定します。デフォルト値は 50 です。 |
|
| Scratch Buffer Chunk Count | 一時割り当てのために物理演算システムに割り当てられる、16 KB のメモリチャンクの数。デフォルト値は 4 で、64 KB のバッファを提供します。 | |
| Fast Motion Threshold | 高速で動くボディがこのフレームを移動したかどうかを判断するために、スイープベースの CCD アルゴリズムが使用する、直線運動のしきい値です。0 より大きい値にする必要があります。デフォルト値は無限大で、3.402823e+38 で表されます。 |
|
Cloth タブの設定は、Cloth 物理演算にのみ適用されます。
| プロパティ | 機能 |
|---|---|
| Cloth Gravity | クロスコンポーネントの各軸の重力値を設定します。デフォルトでは、X は 0、Y は -9.81、Z は 0 に設定されています。 |
| Enable Cloth Inter-Collision | このプロパティを有効にすると、クロスのパーティクルが互いに衝突できるようになります。詳細は、Cloth: Self collision and intercollision を参照してください。 |
| Distance | それぞれのインターコリジョンするクロスのパーティクルの周りのスフィアの直径を定義します。Unity は、シミュレーション中にこれらのスフィアが重なり合わないようにします。Distance は、2 つのパーティクル間の最短距離よりも小さく設定する必要があります。距離が大きい場合、クロスのコリジョンが距離の制約に反してジッターが発生する場合があります。この値はデフォルトで 0.1 に設定されています。 |
| Stiffness | インターコリジョンするクロスパーティクルが Distance の値よりも近いときの、パーティクル間の分離力の強さを定義します。値は、PhysX が分離力を乗算する係数です。クロスソルバーは、指定した値に基づいて剛性を計算します。この値はデフォルトで 0.2 に設定されています。 |
PhysicsManager