Unity2Dエフェクト
Unity2Dのエフェクトには少々癖があります。
例えば以下のようなエフェクトを表示しようとします。
このエフェクトだけなら良いのですが、このシーンにさらにスプライトを載せてみると…
エフェクトが後ろに!ならスプライトのレイヤーを変える要領でエフェクトのレイヤーを前に…と思いますが、
なぜかエフェクトはInspector上からレイヤーを変える事ができません!
ただ、スクリプトからは変えられるので、その方法の紹介です。
EffectLayerSetter
2Dエフェクトを前面に表示するスクリプトは以下の通りです。
やり方はスプライトなどレイヤーを変えるのと同じく、レンダラーのレイヤーを名前で指定しているだけです。
parent.gameObject.renderer.sortingLayerName = EFFECT_SORTING_LAYER_NAME;
また、エフェクトのゲームオブジェクトが複数ある場合を想定して、スクリプトが設定された子にも同様の処理を行っています
foreach (Transform child in parent.transform) { SetSortingLayer (child); }
Spriteの場合はSprite RendererというのがInspector上で見えるので分かり易いですが、Paticle Systemの場合はレンダラーが見えないのでなんとも分かり辛い…というか見えたらそこから設定出来ますしね。
使い方
使い方ですが、これをエフェクトの一番上のオブジェクトに付けます。
そして、[Edit]-[Project Settings]-[Tag and Layers]でレイヤー設定画面を開き、
右下の+ボタンからEffectというレイヤーを作り、元あったDefaultの下に置きます。
なお、下にいくほど前面に表示されるレイヤーです。
これでエフェクトが前面に表示されるはずです!
ギャー
番外編
ググってみたら違う方法もあったのでご紹介!
背景をDefaultより上にもってくると表示されます。
particleSystemのSorting Layerの初期値はDefaultなので。
http://memo.scri.me/entry/2013/12/07/022038
なるほど、以下のように元あるDefaultというレイヤーをエフェクト用レイヤーにしちゃえばエフェクト側は特にいじらなく大丈夫そうですね。他の画像は全てレイヤーを設定しなければいけませんが…
どうでもいいけど、レイヤー名とかタグ名って日本語使える…?