はじめに
オブジェクトに物理動作を追加して、物理法則に従ってオブジェクトをリアルに動かすことができます。
これは内部的にBox2Dが使用されており、幅広いゲームで役立っています。
「Angry Bird」のようなゲーム、バイク
シミュレーション、その他多くのゲームではオブジェクトのアニメーション化に物理エンジンが使用されています。
ビヘイビアは 3
つの大きな概念で構成されています。ボディを含むワールド、ボディ、およびボディをリンクするジョイントです。
①ボディタイプ(Type)
ダイナミックでは、さらに以下のパラメーターを追加で設定できます。
Bullet:オブジェクトが連続衝突検出アルゴリズムを使用することで、かなり高速に移動する場合でも衝突時に反応の精度が向上します。弾丸や高速オブジェクトを正確にシミュレートし、薄いオブジェクトと衝突時に突き抜けることをある程度防止できます。ただ、多少の負荷がかかるのでパフォーマンスがわずかに低下します。
本当に必要な場合にのみ使用することを推奨します。
パラメーター
設定画面の必要最低限の解説です。
詳細については公式Wikiの物理エンジン2.0をご覧ください。
①ボディタイプ(Type)
-
ダイナミック:
最も一般的なタイプのボディです。
重力の影響を受け、他のダイナミックボディ、スタティックボディ、キネマティックボディと衝突させることができます。フォースやインパクトが適用され、速度を変更することもできます。動かすべきオブジェクトのほとんどにダイナミックを使います。 - スタティック : スタティックは重力の影響を受けないため、フォースやインパクトを使用したり、速度を変更したりしてオブジェクトを動かすことはできません。
衝突できるのは動的オブジェクトのみであり、運動学やその他の静的ボディは無視されます。これらは、地面、動かない壁、プラットフォームなど、静的なワールド構造体に使用することを目的としています。 - キネマティック: キネマティックは非常に専門的です。これらは一種の静止物体であるため、重力、力、衝撃の影響を受けませんが、速度を変更することで移動させることができます。キネマティックはダイナミックボディのみと衝突しますが、この衝突の結果として移動することはありません。キネマティック ボディは、可動壁やリフトのような動くプラットフォームをシミュレートするのに役立ちます。
②ダイナミックの関連設定
ダイナミックでは、さらに以下のパラメーターを追加で設定できます。
Bullet:オブジェクトが連続衝突検出アルゴリズムを使用することで、かなり高速に移動する場合でも衝突時に反応の精度が向上します。弾丸や高速オブジェクトを正確にシミュレートし、薄いオブジェクトと衝突時に突き抜けることをある程度防止できます。ただ、多少の負荷がかかるのでパフォーマンスがわずかに低下します。
本当に必要な場合にのみ使用することを推奨します。
Fixd
Rotation:チェックを入れるとオブジェクトは回転できなくなります。チェックが外れている状態では、オブジェクトが壁に衝突するたびに回転したり、坂道を歩いているときに回転するなど、物理的な影響を受けます。それらを制限し、イベントでオブジェクトの回転を制御する場合にチェックを入れます。
Can
Sleep:チェックを入れると静止しているオブジェクトのパフォーマンスを向上させ、オブジェクトをスリープ状態にできます。これはパフォーマンス設定であり、シミュレーション自体には影響しません。
スリープが真のときは、イベントで「オブジェクトはスリープしている」という条件を使用し、動いているか静止しているかの判別ができます。
スリープが真のときは、イベントで「オブジェクトはスリープしている」という条件を使用し、動いているか静止しているかの判別ができます。
③ボディシェイプ(Shape)
この項目ではボディの衝突判定となるシェイプの形状とサイズを設定します。
形状
-
ボックス(四角形):オブジェクトの中心軸に沿った長方形です。幅と高さを特に指定しなければ、オブジェクトと同じ大きさになります。
-
サークル(円形):オブジェクトを中心とする円です。半径を特に指定しなければ、オブジェクトの幅と高さの平均で計算されます。オブジェクトが正方形の場合は、オブジェクトの境界ボックス内に内接する円になります。
-
エッジ(線形):オブジェクトの中心に沿った細い線です。このシェイプには体積(面積)がないため、ダイナミックボディとしては正常に機能しません。地面やプラットフォームなどのスタティックな形状に使用することを想定しています。長さと角度を特に指定しなければ、エッジはオブジェクトの幅と同じ長さの水平線になります。
- ポリゴン(多角形):頂点によって定義されるカスタム形状です。ポリゴンは凸面である必要があり、この条件が満たされない場合、形状はデフォルトのボックスにフォールバックします。頂点の数は 3 以上(そうでないと凸状にできないので)、8 以下(ポリゴンが保持できる頂点の最大数)です。3 ≦ 頂点数 ≦ 8。
サイズ
-
オフセット:オフセットには 2 つの構成要素(X と
Y)があり、オブジェクトの中心からシェイプをずらすために使います。
- スケール:シェイプも拡大縮小できます。これはシェイプの大きさとオフセットをスケールします。大きさを指定しなければ、たとえばボックスシェイプは元のオブジェクトと同じ大きさになります。この場合は自動的にスケーリングするので、シェイプのスケールを変更する必要はありません。シェイプタイプがポリゴンの場合、スケールすると頂点の位置も移動します。スケーリングの原点はポリゴン原点になります。(訳注:ビヘイビアの設定画面にあるオプションは 2021/1 時点で多言語化対応していないため、言語設定が日本語であっても「Polygon Origin」と表示されます)ポリゴン原点を「中央」に設定してシェイプを縮小すると、頂点はオブジェクトの中央に向かって移動します。
仮画像
シェイプを可視化するために用いる画像です。
各形状に沿った画像を使用します。
④ボディの設定
-
密度(Density):密度は重さを決定します。一般的な公式は
密度=質量÷体積 ですが、3 次元の奥行きがないため、これを
密度=質量÷面積 と仮定して問題ありません。同じ密度で面積/大きさの違う
2
つのボディは違う質量になります。したがってオブジェクトのサイズを変更するときは密度も考慮する必要があります。\
\ 密度はマイナスになりません!
-
摩擦(Friction):摩擦は、何かと接触中のボディに移動方向と反対の方向に力を加えます。摩擦が大きいほど、接触中のオブジェクトは速度が低下します。具体例を挙げると、砂で作られたプラットフォームの摩擦はほとんど
1(非常に高い)になり、氷で作られたプラットフォームの摩擦係数はほぼ 0
になります。(摩擦はマイナスになりません)2
つのオブジェクトが接触しているときの摩擦の合計は、オブジェクトの摩擦係数を使った式
friction = sqrt(frictionA * frictionB) で計算されます。
-
反発(Restitution):オブジェクトが各衝突で保持するまたは失うエネルギーの割合を指定します。値ゼロは衝突が完全に非弾性であり、オブジェクトがまったく跳ね返らないことを意味します。反発=
1
の場合、衝突は完全に弾性的であり、オブジェクトは毎回同じエネルギーで跳ね返ります。ボールを地面に落とすと、毎回同じ高さまで跳ね返り続けると想像してください。1
より大きい反発の値も有効ですが、衝突のたびにオブジェクトにエネルギーが与えられ、おそらくシミュレーションが制御不能になります。(反発はマイナスになりません) 2
つのオブジェクトが衝突したときの反発の合計は、オブジェクトの反発係数を使った式
restitution = max(restitutionA, restitutionB) で計算されます。
-
線形減衰(Linear
Damping):線形減衰は、常にオブジェクトの速度を低下させます。値が大きいほど、オブジェクトの速度が急速に低下します。空気抵抗を想像するといいでしょう。値をとても大きくすると、液体内を移動するオブジェクトをシミュレートできます。(任意の値を使用できますが、マイナスの値を設定するとオブジェクトが速度を増していき、非物理的な動きになります。)
-
角度減衰(Angular
Damping):角度減衰は線形減衰に似ていますが、オブジェクトの線形速度が遅くなる代わりに角速度を低下させ、オブジェクトの回転がゆっくりになっていきます。(任意の値を使用できますが、マイナスの値を設定するとオブジェクトが角速度を増していき、非物理的な動きになります。)
- 重力スケール(Gravity Scale):ワールドの重力に重力スケールを掛けた値が、オブジェクトに適用する重力になります。これはベクトルではなく数値であることに注意してください。重力の向きは変更できず、その強さだけを変更できます。任意の数値が有効です。いくつかの例を挙げましょう。重力スケールが 1 の場合、適用される重力はワールド重力そのままになります。2 の場合、このオブジェクトの重力は 2 倍になり、0.5 の場合、重力は半分になります。0 の場合、オブジェクトは重力の影響を受けません。-1 の場合、重力は反転します。
⑤レイヤーとマスク
レイヤーとマスクは、オブジェクト間の衝突をフィルタリングする方法です。
1~16のレイヤーとマスクを組み合わせて、一致するオブジェクト同士を衝突させられます。
オンラインデモ
プロジェクトファイル
上記オンラインデモのプロジェクトファイルです。
おわりに
ご不明な点や、追加でお知りになりたいことがございましたらコメントからご質問ください。
0 件のコメント:
コメントを投稿