この記事でのバージョン
Unity 5.3.1f1 Personal
目次
はじめに
今回はUnity5より追加されたSurfaceEffector2Dのお話。
SurfaceEffector2Dとはオブジェクトの表面に速度を設定する
というもので、簡単にムービングウォーク(動く歩道)やエスカレーターを表現できる優れものです。
なお、名前の通りに2D用なのであしからず。
使い方
まずは簡単に使い方の説明です。
SurfaceEffector2Dを使う時は、同じGameObjectにCollider2Dが必要になります。
また、Collider2DのUsedByEffectorを有効にする必要もあります。
とりあえずこの状態で、適当なColliderとRIgidBody2Dをつけたオブジェクトを
落とすと、以下のような感じになります。
乗ったボールに速度が与えられて移動しているのが分かると思います。
使用例
では、SurfaceEffector2Dの使用例をいくつかご紹介。
ムービングウォーク
既に最初の説明であげてしまったんですが、表題にもなっているの再度ご紹介。
ムービングウォークを表現するにはSpeedに値を設定するだけです。
上記の左の通りに力の発生源のパラメータを、
右にある通りに力を受けるオブジェクトのパラメータを設定した場合、
以下のような動きになります。
最初に挙げた例とは違い、
ボールの初速度をムービングウォークで流れる位置と逆の方向に設定しています。
エスカレーター
まずSurfaceEffector2Dを使わずにエスカレーター的なもの、
つまり上にオブジェクトを乗せた状態のオブジェクトを移動させる
と以下のよう感じになります。
乗り物に付いていけず、ボールが落ちてしまっていますね。
なお、上下オブジェクトと共、Rigidbody2Dで動いており、
下のオブジェクトは以下のように開始時に速度を与えています。
private void Start () { GetComponent<Rigidbody2D> ().velocity = new Vector2(5, 5); }
これを改善するためにSurfaceEffector2Dが使えます。
方法は移動速度と同速を接触しているオブジェクトに与えるだけです。
上記の左の通りに力の発生源のパラメータを、
右にある通りに力を受けるオブジェクトのパラメータを設定した場合、
以下のような動きになります。
これで乗ったオブジェクトに付いていけるようになります。
パラメータ
次にSurfaceEffector2Dのパラメータについて説明をば。
Collider Mask
エフェクトを適用するレイヤーを指定できます。
上記の画像例だとRedというLayerにあるオブジェクトにのみエフェクトが適用
するように設定されています。
なお、Use Collider Maskが無効の時は全レイヤーにエフェクトが適用されます。
Speed
オブジェクトの表面に設定する速度です。
値が大きいほどより速くなります。
Speed Variation
オブジェクトの表面に設定する速度のばらつきです。
もしSpeed Variationが10なら+0~+10の値でSpeedがランダムに変動
するようになり、速度が不規則になります。
上記の例は上がSpeed Variation 0、下が Speed Variation 10、Speedは両方とも2のものです。
下の方は毎回ボールの間隔が違い、移動中も近づいたり離れたりしているのが分かると思います。
つまり、接しているオブジェクト毎に変動値が違うようです。
Force Scale
接しているオブジェクトに速度をどれだけ割合で変更するかっといった感じのものです。
0~1の値で設定でき、1の時は瞬時に速度を変更します。
上記の例は上がForce Scale 0.1、下がForce Scale 1、Speedは両方とも5のものです。
Force Scale 1の場合は当たった瞬間にそれまでの速度と関係なく
設定された速度になっているのが分かると思います。
Use Contact Force
接している点に速度を適用するっというものです。
これを無効にしていると接しているオブジェクトの中心点に適用します。
上記の例は上がUse Contact Forceが無効、下がUse Contact Forceが有効のものです。
下のUse Contact Forceを有効にしている方は接点に速度を加えているために、
オブジェクトが回転してしまってる事が分かると思います。
Use Friction
摩擦を使用するかどうかの設定です。
上記の例は上がUse Frictionが有効、下がUse Frictionが無効のものです。
下の方は摩擦が無いので、オブジェクトが回転していない事が分かると思います。
Use Bounce
バウンスをで使用するかどうかの設定です。
上記の例は上がUse Bounceが有効、下がUse Bounceが無効のものです。
おわりに
機能は実にシンプルですが、2Dアクションゲーム作るのにはかなり重宝しそうなComponentでした。
これで何でも流し放題ですね(:3っ)∋〜