User Manual

物理

PlayCanvasは物理エンジンを搭載しています。物理エンジンはリアルにシーン内オブジェクトの動きを制御することができます。多くのゲームは、ゲームプレイを可能にするために何らかの物理シミュレーションを使用しています。例えば、古典的なゲームのAsteroidsでは、船がロケットを発射しながら加速します。それには慣性があり、接触したときに小惑星がそれを破壊します。このような単純なケースはベテランのプログラマにとっては簡単ですが、物理エンジンを使用すれば誰もが作成することができます。

リジッドボディ

具体的には、PlayCanvasにはリジッドボディ物理エンジンがあります。つまり、エンジンは一切変形しないオブジェクトの理想化された表現であるリジッドボディをシミュレートします。リジッドボディの動きを設定するいくつかのプロパティがあります:

いつでも、ボディの速度を照会(あるいは直接設定)することができます。次の2つの形式になります:

測定の単位

デフォルトでは、PlayCanvas物理エンジンは1メートルを1 unitとしています。オブジェクトを物理的に正確であると思われる速度で落下させるには、シーンのオブジェクトサイズが適切であることを確認する必要があります。

例えば、ゲームに身長1.8メートルのキャラクターを設定している場合、エディタの3Dビューで1.8 unitの高さになります。

重力

重力はシーン内のすべてのリジッドボディに適用される一定の力です。デフォルトでは、ワールドの負のY軸に-9.81に設定されています(つまり、直下)。このデフォルトは、地球の重力に近い値です。この値を増減することもできます。例えば、宇宙設定のゲームの重力をゼロに設定することも可能です。シーンにかかる重力を編集するには、Scene Settingsパネルを開きます。

剛体に力を加えて動かす

ボディは力や衝撃に反応して動きます。力は一定の期間にボディに対して加えられますが、衝撃は瞬時に加えられます。いくつかの例をあげます。床の上で重い物を押す場合は、一定の時間にわたって力を加えます:

    update: function (dt) {
        // While the right arrow key is pressed, apply a force to the right
        if (app.keyboard.isPressed(pc.KEY_RIGHT)) {
            this.entity.rigidbody.applyForce(10, 0, 0);
        }
    }

大砲から砲弾を発射する場合は、単一の衝撃を加えます:

    update: function (dt) {
        // If the space bar was pressed, apply an impulse up and to the right
        if (app.keyboard.wasPressed(pc.KEY_SPACE)) {
            this.entity.rigidbody.applyImpulse(10, 10, 0);
        }
    }

リジッドボディのテレポート

エンティティにリジッドボディとコリジョンコンポーネントを追加することで、物理エンジンにそのエンティティの位置と方向を設定する責任を渡します。これは、pc.Entity APIを使用してスクリプト内のエンティティの位置や向きを更新しようとしても関数に影響を与えないことを意味します。代わりに、瞬間的にリジッドボディの位置および/または向きを更新する旨を物理エンジンに明示的に通知するテレポート関数をリジッドボディコンポーネントに呼び出す必要があります。

This site is translated by the community. If you want to get involved visit this page