読者です 読者をやめる 読者になる 読者になる

(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

風やバリアを表現できるAreaEffector2Dの使い方やパラメータ【Unity】【Effector2D】

Unity Effector2D

このエントリーをはてなブックマークに追加

この記事でのバージョン
Unity 5.3.1f1 Personal

はじめに

今回はUnity5より追加されたAreaEffector2Dのお話。

AreaEffector2Dとはあるエリアに対して力を適用する

というもので、簡単に風やバリアを表現できる優れものです。



なお、名前の通りに2D用なのであしからず。


使い方

まずは簡単に使い方の説明です。

AreaEffector2Dを使う時は、同じGameObjectにCollider2Dが必要になります。


また、Collider2DのUsedByEffectorを有効にする必要もあります。

IsTriggerについても有効にしていないと、衝突判定が起こるので注意が必要です。


f:id:kan_kikuchi:20160225133522j:plain


とりあえずこの状態で、適当なColliderとRIgidBody2D(GravityScale = 0)をつけたオブジェクトを

近づけると、以下のような感じになります。


f:id:kan_kikuchi:20160129065409g:plain


エリア内にいるオブジェクトに速度が与えられているのが分かると思います。


使用例

では、AreaEffector2Dの使用例をいくつかご紹介。


風を表現するにはForce Magnitudeで強さをForce Angleで角度を設定し引力を発生させます。


f:id:kan_kikuchi:20160225133915p:plain f:id:kan_kikuchi:20160128134759p:plain


上記の左の通りに力の発生源のパラメータを、

右にある通りに力を受けるオブジェクトのパラメータを設定した場合、

以下のような動きになります。左下から右上に風が吹いてるイメージです。


f:id:kan_kikuchi:20160129070205g:plain


バリア

Dragで速度を減衰させる事で、衝撃を吸収する感じのバリアを作ってました。


f:id:kan_kikuchi:20160225133929p:plain f:id:kan_kikuchi:20160128140245p:plain


上記の左の通りに力の発生源のパラメータを、

右にある通りに力を受けるオブジェクトのパラメータを設定した場合、

以下のような動きになります。


f:id:kan_kikuchi:20160129070421g:plain


パラメータ

次はAreaEffector2Dのパラメータについて説明をば。


Collider Mask

エフェクトを適用するレイヤーを指定できます。


f:id:kan_kikuchi:20160127134950j:plain
f:id:kan_kikuchi:20160127135004j:plain
f:id:kan_kikuchi:20160129065440g:plain


上記の画像例だとRedというLayerにあるオブジェクトにのみエフェクトが適用

するように設定されています。


なお、Use Collider Maskが無効の時は全レイヤーにエフェクトが適用されます。


Use Global Angle

次項のForce Angleでワールド空間の角度を使用するかの設定です。


Force Angle

力をかける方向です。

f:id:kan_kikuchi:20160129065512g:plain


Force Magnitude

適用する力の大きさです。

値が大きいほどより強い力を対象に与える事になります。


f:id:kan_kikuchi:20160129065603g:plain


ForceVariation

適用する力のばらつきです。

もしForce Variationが10なら+0~+10の値でForce Magnitudeがランダムに変動

するようになり、力の加わり方が不規則になります。


f:id:kan_kikuchi:20160129065700g:plain


上記の例は左がForce Variation 0、右が Force Variation 2のものです。

微妙にですが、右の方の軌道が毎回変わっているのが分かると思います。


Drag


エフェクターの影響を受けているRigidbody2DのLinerDragに加算される値です。

ようは力とは別に、移動速度に空気抵抗も加える感じです。


f:id:kan_kikuchi:20160129070051g:plain


上記の例は左がDrag 0、右がDrag 1のものです。


AngularDrag

Dragと同様に、回転速度に空気抵抗を加える感じです。


Force Target

力を適用する側の中心(?)を設定する。


RigidbodyとColliderは座標的にも、オブジェクト的にも別々になることがあるので

適宜設定する必要があります。


おわりに

この範囲に入った時だけ一定の力を加える、というのはそんなに難しいことではないですが、

楽に出来るならそれにこしたことはないですよね。

Effector2Dはそんな、より楽を出来るシリーズ感(:3っ)∋〜