統一学習(4)-物理システム

剛体

リジッドボディは、GameObjectの物理的な動作の主要なコンポーネントです。リジッドボディに関連付けると、オブジェクトは重力の影響をすぐに受けます。1つまたは複数のコライダーが見つからない場合、衝突のためにゲームオブジェクトが移動します。
Rigidbodyコンポーネントは、関連付けられているGameObjectの動きを引き継ぐため、スクリプトのTransformプロパティを変更してオブジェクトを移動する必要はなくなりました。したがって、力学を使用してGameObjectを駆動し、物理エンジンに結果を計算させる必要があります。(物理をよく学んでください。)
以下の状況がいくつかあります物理エンジンによって制御されないリジッドボディを備えたGameObjectも必要になる場合があります。たとえば、スクリプトから直接キャラクターを制御する必要があるかもしれませんが、それでもトリガー(後述)で検出できます。このスクリプトによって生成される非物理的な動きは、運動学的な動きと呼ばれます。Rigidbodyコンポーネントには運動学的属性があり、物理エンジンの制御から削除され、スクリプト内を移動します。Is Kinematicをスクリプトから変更して、オブジェクトを開いたり閉じたりする物理を許可することは可能ですが、操作上のオーバーヘッドが発生します(できるだけ使用しないでください)。

スリープモード

リジッドボディの動きが事前定義された最小ライン/回転速度よりも遅い場合、物理エンジンはそれが停止したと見なします。これを行った後、ゲームオブジェクトは、衝突または力に当たって「スリープ」モードに入るまで移動しなくなります。この最適化は、リジッドボディが再び「目覚め」る(つまり、再び動いている)まで、リジッドボディがプロセッサの更新に時間をかけないことを意味します。
ほとんどの場合、Rigidbodyコンポーネントはスリープ状態になるか、明らかにウェイクアップします。ただし、Static Collider(RigidbodyのないGameObject)が変換の位置を変更して、GameObjectに近づいたり、原則として適用したりすると、GameObjectは起動に失敗する場合があります。これにより、床が下から削除された後、Rigidbody GameObjectが空中にぶら下がる場合があります。この場合、GameObjectはWakeUp関数を使用して、明示的にGameObjectを起動します。

コライダー

Colliderコンポーネントは、物理的な衝突のためのGameObjectの形状を定義します。コライダーは非表示で、GameObjectグリッドと同じ形状である必要はありません。ゲームプレイでは、おおよそのグリッド形状で十分です。
最も単純なコライダーは、初期のコライダータイプです。3Dでは、これらのカテゴリは、ボックスコライダー、スフィアコライダー、カプセルコライダーです。2Dでは、Box Collider 2DとCircle Collider 2Dを使用できます。

複合コライダー

複合コライダーはGameObjectの形状を推定し、少量のプロセッサーオーバーヘッドのみを消費します。子GameObjectsに柔軟にコライダーを追加することもできます。たとえば、親GameObjectの座標軸を基準にボックスを回転できます。このような複合コライダーを構築する場合は、階層内のソースGameObjectに配置された1つのRigidbodyコンポーネントのみを使用する必要があります。
最初のコライダーは、せん断変形には使用できません。

コライダー

場合によっては、複合コライダーの偶数が十分に正確ではありません。3Dでは、グリッドコライダーを使用して、ゲームオブジェクトのグリッド形状を正確に一致させることができます。
このタイプのコライダーは、元のタイプよりも多くのプロセッサリソースを消費し、使用量をできるだけ少なくします。もちろん、グリッドコライダーは別のグリッドコライダーと衝突しません(つまり、接触しても何も起こりません)。場合によっては、インスペクターでグリッドコライダーを凸としてマークすることで、機能をバイパスできます。これにより、「凸包」のコライダー形状が作成されます。(この形状は開始メッシュに非常に似ていますが、アンダーカットはありません)(?)これの利点は、凸型メッシュコライダーが他のメッシュコライダーと衝突する可能性があるため、動くキャラクターがある場合、この機能を使用できます。

静的コライダー

静的コライダーを使用すると、リジッドボディコンポーネントなしでゲームオブジェクトにコライダーを追加して、シーン内で移動する必要のない床、壁、および要素を構築できます。トランスフォームの位置を変更して静的コライダーを再配置することはできません。これは、物理エンジンのパフォーマンスに深刻な影響を与えるためです。Rigidbodyを使用したGameObjectsのコライダーは、動的コライダーと呼ばれます。静的コライダーは動的コライダーと相互作用できますが、リジッドボディがないため、衝突のために移動できません。

物理的な材料

コライダーが相互作用する場合、コライダーの表面は、コライダーが表すマテリアルのプロパティをシミュレートする必要があります。たとえば、氷の層は滑りやすく、ゴムボールはこすって弾力性があります。コライダーの形状は衝突時に変形しませんが、摩擦と弾性力は物理的な材料で構成できます。

トリガー

衝突が発生すると、スクリプトシステムはそれを検出し、OnCollisionEnter関数を使用してアクションを開始できます。ただし、物理エンジンを使用して、衝突がないときにコライダーが他の領域に入ったことを簡単に検出することもできます。(Is Trigger属性を使用して)Triggerとして設定されたコライダーは、ソリッドオブジェクトとは異なり、他のコライダーを通過させるだけです。コライダーがその領域に入ると、トリガーはこのオブジェクトのスクリプトでOnTriggerEnter関数を呼び出します。

つづく....

おすすめ

転載: www.cnblogs.com/qing2019/p/12729518.html