物理学
はじめに
Studioには、シーン内のロバストでダイナミックなインタラクションを処理するための物理システムが組み込まれています。コライダーの追加
備考
- コライダーはある構成ではネストできるが、他の構成ではネストできない。 例えば、ダイナミック・コライダーの中にスタティック・コライダーがあったり、2つのダイナミック・コライダーが入れ子になっていたりすると、誤動作する可能性がある。
- 有効なコライダーシェイプでもあるジオメトリコンポーネントがない限り、手動でシェイプを指定する必要があります。 例えば、正四面体プリミティブに対応するコライダーがない。
- 複雑なモデルのGLTFモデルコライダー生成は、パフォーマンスに影響を与える可能性があります。
例
次の例は、実行時にコライダーをエンティティに追加する方法を示しています。
ecs.Collider.set(world, component.eid, {
shape: ecs.ColliderShape.Sphere,
type: ecs.ColliderType.Dynamic,
radius: 1,
mass: 1,
eventOnly: false,
lockXAxis: false,
lockYAxis: false,
lockZAxis: false,
friction:0.5,
restitution:0.5,
linearDamping:0,
angularDamping:0,
})
スタティックコライダーとダイナミックコライダー、キネマティックコライダーの比較
物理シミュレーションでは、コライダーは衝突検出のためにオブジェクトの物理的な形状を定義する。 これらは、力や環境との相互作用の仕方によって、静的、動的、あるいは運動学的なものとなる。
- **外力や物理シミュレーションに 反応しないコライダー。 固定されたままなので、壁や床、地形などの動かないものに最適です。
- **重力、衝突、インパルスなどの外力に反応するコライダー。 選手や敵、瓦礫のような動く物体に適している。
- Kinematic: コライダーは力の影響を受けず、ユーザーによって完全にプログラム的にコントロールされます。 静的ボディとは異なり、運動ボディは動くことができ、衝突によって他の動的ボディに影響を与えることができる。
イベントのみ
eventOnly
設定は、コライダーをトリガーエリアに変換します。それは、もはや物理オブジェクトをブロックしたり反応したりしません。
機能
物理コライダーがあれば、どんなエンティティにも直接力(リニアと角度)を加えることができます。 これらの力は、一定の間隔で行われる次の物理シミュレーションの更新で適用される。 この関数は、力の方向と大きさを定義する3Dベクトルを受け付ける。
速度
リニア
ecs.physics.setLinearVelocity(world, component.eid, forceX, forceY, forceZ)
アンギュラー
ecs.physics.setAngularVelocity(world, component.eid, forceX, forceY, forceZ)
力とトルク
フォース
ecs.physics.applyForce(world, component.eid, forceX, forceY, forceZ)
トルク
ecs.physics.applyTorque(world, component.eid, torqueX, torqueY, torqueZ)
インパルス
チップ
この関数は、物理コライダーに1回限りのインパルス力を適用し、与えられたインパルスベクトルに基づいてその速度を変更するために使用されます。 この方法は、ジャンプやパンチ、突然のプッシュなど、素早いワンアクションの反応が必要な競技に有効だ。
ecs.physics.applyImpulse(world, component.eid, impulseX, impulseY, impulseZ)
重力
重力係数
どのシーンでも、重力は "世界重力 "として知られる一定の力として作用する。 この力は、ダイナミックに設定されているシーン内のすべてのコライダーに影響します。 ワールドグラビティが個々のコライダーに与える影響をカスタマイズするために、我々は "グラビティ係数 "と呼ばれる属性を提供している。
世界の重力を設定する
ecs.physics.setWorldGravity(world, gravity)