Skip to content

SimplePhysicsモード

Rapier物理エンジンによる剛体物理演算で動くモードです。重力で 落ちる、ぶつかって跳ね返る、転がる、といった動きが自動で 計算されます。使う前にawait a3.initPhysics();が必要です。

js
await a3.initPhysics();
obj.setMode('SimplePhysics',{rigidBody:'fixed'});

以下は固定した床の上に箱を落とすサンプルです。

js
import * as a3 from 'a3js';

await a3.initPhysics();
const view = new a3.Window(600,300);
view.camera.setPosition(0,0,10);

const ground = new a3.Box(10,0.5,10,"red");
ground.setMode('SimplePhysics',{rigidBody: 'fixed'});
ground.setPositionNow(0,-3,0);
view.scene.add(ground);

const box = new a3.Box("blue");
box.setMode('SimplePhysics');
box.setPositionNow(0,2,0);
box.setRotationNow(45,30,0);
view.scene.add(box);

rigidBody(剛体の種類)

一番重要なオプションです。

  • dynamic — 重力や衝突などの力で動く剛体(デフォルト)。 落ちる物・転がる物に使います。
  • fixed — 動かない固定剛体。地面・壁・建物などに使います。
  • kinematic — プログラムで直接位置を制御する剛体。力の影響は 受けませんが、dynamicな剛体を押すことができます。動く床や 障害物などに使います。位置はsetPositionNow()で動かします。

なお、Rapierのデフォルトではkinematic同士の衝突は検知されませんが、 a3jsではkinematic同士も衝突(衝突イベントの検知)するように なっています。

コライダーのオプション

  • collider'solid'(物理的に衝突する。デフォルト)または 'sensor'(衝突イベントは発生するが物理的な衝突はしない)。 センサーはゴール判定やアイテム取得などに便利です(使用例は カーレースサンプルプログラム)。
  • meshCollider — メッシュ形状からコライダーを作る方法。 'convex_hull'(凸包。高速で、動く物体にも使える。デフォルト) または'tri_mesh'(三角メッシュ。複雑な形状に対応するが、 動く物体には非推奨)。地形には'tri_mesh'rigidBody:'fixed'の 組み合わせが定番です。
js
field.setMode('SimplePhysics',{meshCollider:'tri_mesh', rigidBody:'fixed'});

その他のオプション

  • mass — 質量(kg)。デフォルトは1.0
  • friction — 摩擦係数(0.0〜1.0)。デフォルトは0.5
  • restitution — 反発係数(0.0〜1.0)。0で全く弾まず、1に近いほど よく弾みます。デフォルトは0.5
  • collisionDetectiontrueにすると衝突の検知が有効になります (デフォルトはfalse)。詳しくは 当たり判定
  • membership/filter — 衝突グループのビットマスク。「この グループとだけ衝突する」といった制御ができます。

コライダーの形や位置を確認したいときは scene.setPhysicsDebugMode(true);が便利です。

詳細はAPIドキュメントを 参照してください。