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

(:3[kanのメモ帳]

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

2Dのエフェクトを前面に表示する【Unity】

Unity

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

Unity2Dエフェクト

Unity2Dのエフェクトには少々癖があります。
例えば以下のようなエフェクトを表示しようとします。

f:id:kan_kikuchi:20141223160429p:plain

このエフェクトだけなら良いのですが、このシーンにさらにスプライトを載せてみると…

f:id:kan_kikuchi:20141223160605p:plain

エフェクトが後ろに!ならスプライトのレイヤーを変える要領でエフェクトのレイヤーを前に…と思いますが、
なぜかエフェクトは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の場合はレンダラーが見えないのでなんとも分かり辛い…というか見えたらそこから設定出来ますしね。


使い方

使い方ですが、これをエフェクトの一番上のオブジェクトに付けます。

f:id:kan_kikuchi:20141223161233p:plain

そして、[Edit]-[Project Settings]-[Tag and Layers]でレイヤー設定画面を開き、

f:id:kan_kikuchi:20141223161257p:plain

右下の+ボタンからEffectというレイヤーを作り、元あったDefaultの下に置きます。
なお、下にいくほど前面に表示されるレイヤーです。

f:id:kan_kikuchi:20141223161340p:plain

これでエフェクトが前面に表示されるはずです!

f:id:kan_kikuchi:20141223161637p:plain

ギャー


番外編

ググってみたら違う方法もあったのでご紹介!

背景をDefaultより上にもってくると表示されます。
particleSystemのSorting Layerの初期値はDefaultなので。

なるほど、以下のように元あるDefaultというレイヤーをエフェクト用レイヤーにしちゃえばエフェクト側は特にいじらなく大丈夫そうですね。他の画像は全てレイヤーを設定しなければいけませんが…

f:id:kan_kikuchi:20141223162600p:plain

どうでもいいけど、レイヤー名とかタグ名って日本語使える…?