この記事でのバージョン
Unity 5.3.0f4 Personal
目次
はじめに
今回はUnity5より追加されたPointEffector2Dのお話。
PointEffector2Dとはあるポイントに対して力を適用する
というもので、簡単に重力や磁力を表現できる優れものです。
なお、名前の通りに2D用なのであしからず。
使い方
まずは簡単に使い方の説明です。
PointEffector2Dを使う時は、同じGameObjectにCollider2Dが必要になります。
また、ColliderのUsedByEffectorを有効にする必要もあります。
IsTriggerについても有効にしていないと、衝突判定が起こるので注意が必要です。
とりあえずこの状態で、適当なColliderとRIgidBody2D(GravityScale = 0)をつけたオブジェクトを
近づけると、以下のような感じになります。
公転するように引っ張られて軌道が変わっているのが分かると思います。
使用例
では、PointEffector2Dの使用例をいくつかご紹介。
重力
重力を表現するにはForce Magnitudeを-にし引力を発生させます。
上記の左の通りに力の発生源のパラメータを、
右にある通りに力を受けるオブジェクトのパラメータを設定した場合、
以下のような動きになります。
磁力
次に磁力の反発をForce Magnitudeを+にして表現してみます。
上記の左の通りに力の発生源のパラメータを、
右にある通りに力を受けるオブジェクトのパラメータを設定した場合、
以下のような動きになります。
エフェクターは同時に二つ付けられないようなので、
引力も発生させたい場合は別のオブジェクトを作成する必要がありそうです。
爆発
重力と磁力は永続的に力を発生させていましたが、
瞬間的に力を発生させる事で、爆発っぽくしてみました。
上記の左の通りに力の発生源のパラメータを、
右にある通りに力を受けるオブジェクトのパラメータを設定した場合、
以下のような動きになります。
パラメータ
次にPointEffector2Dのパラメータについて説明をば。
Collider Mask
エフェクトを適用するレイヤーを指定できます。
上記の画像例だとRedというLayerにあるオブジェクトにのみエフェクトが適用
するように設定されています。
なお、Use Collider Maskが無効の時は全レイヤーにエフェクトが適用されます。
Force Magnitude
適用する力の大きさです。
値が大きいほどより強い力を対象に与える事になります。
Force Variation
適用する力のばらつきです。
もしForce Variationが10なら+0~+10の値でForce Magnitudeがランダムに変動
するようになり、力の加わり方が不規則になります。
上記の例は上がForce Variation 0、下が Force Variation 1のものです。
Distance Scale
これはイマイチ分からなかったので、以下のページをどうぞ。
Unity - スクリプトリファレンス:PointEffector2D.distanceScale
距離によって適用する力が変わる場合に、近い時と遠い時の力の差を調整するって事ですかね……?
しかし、数値をいじってみても違いが分かりませんでした。
Drag
エフェクターの影響を受けているRigidbody2DのLinerDragに加算される値です。
ようは力とは別に、移動速度に空気抵抗も加える感じです。
上記の例は上がDrag 0、下がDrag 1のものです。
Angular Drag
Dragと同様に、回転速度に空気抵抗を加える感じです。
Force Source
力の発生源の中心を設定する。
RigidbodyとColliderは座標的にも、オブジェクト的にも別々になることがあるので
適宜設定する必要があります。
Force Target
力を適用する側の中心(?)を設定する。
Force Sourceの相手側verですね。
Force Mode
力の適用方法を設定する。
それぞれのModeの内容は以下の通りです。
Constant - 距離に関係なく一定の力
Inverse Linear - 離れるほど力が弱くなる、力の弱まり方は距離に対して線形
Inverse Squared -離れるほど力が弱くなる、力の弱まり方は距離の2乗、実世界の重力と同じ。
上記の例は上からConstant、Inverse Linear、Inverse Squaredを並べたものです。
見ての通り、違いが出ていないっぽいので、スケールを10倍にしてみたのが以下の例です。
おわりに
やっぱり見えない力が作用しているというか、重要な要素になってるゲームって面白いですよね。
特に重力。
と言う事でGRAVITY DAZE 2やりたい今日この頃です(:3っ)∋〜