この記事でのバージョン
Unity 5.3.1f1 Personal
目次
はじめに
今回はUnity5より追加されたAreaEffector2Dのお話。
AreaEffector2Dとはあるエリアに対して力を適用する
というもので、簡単に風やバリアを表現できる優れものです。
なお、名前の通りに2D用なのであしからず。
使い方
まずは簡単に使い方の説明です。
AreaEffector2Dを使う時は、同じGameObjectにRigidBody2DとCollider2Dが必要になります。
また、Collider2DのUsedByEffectorを有効にする必要もあります。
IsTriggerについても有効にしていないと、衝突判定が起こるので注意が必要です。
さらにRigidBody2DのGravityScaleを0にしないと落ちてしまう点にも注意が必要です。
動かさない場合はIs Kinematicを有効にしましょう。
とりあえずこの状態で、適当なColliderとRIgidBody2D(GravityScale = 0)をつけたオブジェクトを
近づけると、以下のような感じになります。
エリア内にいるオブジェクトに速度が与えられているのが分かると思います。
使用例
では、AreaEffector2Dの使用例をいくつかご紹介。
風
風を表現するにはForce Magnitudeで強さをForce Angleで角度を設定し引力を発生させます。
上記の左の通りに力の発生源のパラメータを、
右にある通りに力を受けるオブジェクトのパラメータを設定した場合、
以下のような動きになります。左下から右上に風が吹いてるイメージです。
バリア
Dragで速度を減衰させる事で、衝撃を吸収する感じのバリアを作ってました。
上記の左の通りに力の発生源のパラメータを、
右にある通りに力を受けるオブジェクトのパラメータを設定した場合、
以下のような動きになります。
パラメータ
次はAreaEffector2Dのパラメータについて説明をば。
Collider Mask
エフェクトを適用するレイヤーを指定できます。
上記の画像例だとRedというLayerにあるオブジェクトにのみエフェクトが適用
するように設定されています。
なお、Use Collider Maskが無効の時は全レイヤーにエフェクトが適用されます。
Use Global Angle
次項のForce Angleでワールド空間の角度を使用するかの設定です。
Force Angle
力をかける方向です。
Force Magnitude
適用する力の大きさです。
値が大きいほどより強い力を対象に与える事になります。
ForceVariation
適用する力のばらつきです。
もしForce Variationが10なら+0~+10の値でForce Magnitudeがランダムに変動
するようになり、力の加わり方が不規則になります。
上記の例は左がForce Variation 0、右が Force Variation 2のものです。
微妙にですが、右の方の軌道が毎回変わっているのが分かると思います。
Drag
エフェクターの影響を受けているRigidbody2DのLinerDragに加算される値です。
ようは力とは別に、移動速度に空気抵抗も加える感じです。
上記の例は左がDrag 0、右がDrag 1のものです。
AngularDrag
Dragと同様に、回転速度に空気抵抗を加える感じです。
Force Target
力を適用する側の中心(?)を設定する。
RigidbodyとColliderは座標的にも、オブジェクト的にも別々になることがあるので
適宜設定する必要があります。
おわりに
この範囲に入った時だけ一定の力を加える、というのはそんなに難しいことではないですが、
楽に出来るならそれにこしたことはないですよね。
Effector2Dはそんな、より楽を出来るシリーズ感(:3っ)∋〜