メインコンテンツへスキップ

物理学

はじめに

Studioには、シーン内のロバストでダイナミックなインタラクションを処理するための物理システムが組み込まれています。

コライダーの追加

メモ
  • コライダーはある構成ではネストできるが、他の構成ではネストできない。 例えば、ダイナミック・コライダーの中にスタティック・コライダーがあったり、2つのダイナミック・コライダーが入れ子になっていたりすると、誤動作する可能性がある。
  • 有効なコライダーシェイプでもあるジオメトリコンポーネントがない限り、手動でシェイプを指定する必要があります。 例えば、正四面体プリミティブに対応するコライダーがない。
  • 複雑なモデルのGLTFモデルコライダー生成は、パフォーマンスに影響を与える可能性があります。

物理コンポーネント.png

次の例は、実行時にコライダーをエンティティに追加する方法を示しています。

ecs.Collider.set(world, component.eid, {
shape: ecs.ColliderShape.Sphere,
radius,
mass: 1,
eventOnly: false,
lockXAxis: false,
lockYAxis: false,
lockZAxis: false,
friction: 0.5,
restitution: 0.5,
linearDamping: 0,
angularDamping: 0,
rollingFriction: 0.1,
spinningFriction: 0.1,
})

関数一覧

物理コライダーがあれば、どんなエンティティにも直接力(リニアと角度)を加えることができます。 これらの力は、一定の間隔で行われる次の物理シミュレーションの更新で適用される。 この関数は、力の方向と大きさを定義する3Dベクトルを受け付ける。

速度

リニア

ecs.physics.setLinearVelocity(world, component.eid, forceX, forceY, forceZ)

力とトルク

フォース

ecs.physics.applyForce(world, component.eid, forceX, forceY, forceZ)

トルク

ecs.physics.applyTorque(world, component.eid, torqueX, torqueY, torqueZ)

インパルス

tip

この関数は、物理コライダーに1回限りの瞬時力を加え、与えられたインパルスベクトルに基づいてその速度を変更するために使用される。 この方法は、ジャンプやパンチ、突然のプッシュなど、素早いワンアクションの反応が必要な競技に有効だ。

ecs.physics.applyImpulse(world, component.eid, impulseX, impulseY, impulseZ)

重力

重力係数

どのシーンでも、重力は "世界重力 "として知られる一定の力として作用する。 この力は、ダイナミックに設定されているシーン内のすべてのコライダーに影響します。 ワールドグラビティが個々のコライダーに与える影響をカスタマイズするために、我々は "グラビティ係数 "と呼ばれる属性を提供している。

世界の重力を設定する

ecs.physics.setWorldGravity(world, gravity)