Effekseerの描画順の設定・CameraのDepthでの描画順の設定

・はじめに

 UnityではEffekseerの描画順をSortingLayerで設定することが出来ません。Effekseerの描画順を設定する時はCameraのDepthによって分ける方法があります。

 私はCameraのDepthで描画順を設定することに成功しましたので、その方法を紹介します。このブログではEffectを使って解説しますが、Effect以外でも同様のことができるため、CameraのDepthについて詰まっている方は、ぜひ読んでみてください。

では、さっそくやっていきましょう。

 

・準備

 詳しく説明するので、良く理解している方は飛ばして読んでください。

 Effekseer for Unityが追加されていることを前提として話を進めますので、追加していない方は、別のブログを読んでから進めてください。

 

 まず、空のGameObjectを生成して、Effectと名前を付けました。そして、そのGameObjectにAdd Componentから、Effekseer Emitterを追加します。そこにお好みのエフェクトをEffect Assetにドラッグ&ドロップしてください。最後にPlay On Start ,is Loopingにチェックをいれて下さい。

 

 これで、再生ボタンを押したらこのようにEffectが再生されるはずです。Effectが見えなかった場合、EffectのPositionが間違っている・Effectのサイズが小さすぎる・EffectのTextureがインポート出来ていない等が考えられます。

 

 次に、CanvasとImageを生成しました。分かりやすくするために色とサイズを変えましたが、変えなくても大丈夫です。

 この時点で再生ボタンを押すと、Imageが上にでてきて、Effectの一部が見えなくなりました。

 

・実演

 まず、Canvasの設定を変えます。元々CanvasのRender ModeはScreen Space-Overlayとなっていますが、これはImageを上から被せるようなものなので、Effectの下にImageを置きたい場合には使うことが出来ません。Render ModeをScreen Space-Cameraにして、Render CameraをMain Cameraにして下さい。これで通常のGameObjectも(Effectも)Canvasの上に配置することができるようになりました。

 

 次に、Cameraを新しく追加します。名前はCameraEffectにしました。Positionを(0,1,-10)にして、Crear FlagsをDepth Onlyにします。Depth Onlyにすることによって、このカメラよりもDepthが小さなカメラの上に書くことができるようになります。これをしないと、Depthが小さいカメラの映像はSkyboxやSolid Colorに妨げられて、映らなくなります。そして、このCameraのDepthを1にしてください。MainCameraのDepthは0にしてください。これによって、MainCameraの上にこのCameraの映ったものを書くという処理ができるようになりました。

 

 次に、EffectというLayerを追加してください。そして、MainCameraのCulling Maskに上の写真のように、Effect以外にチェックが入っている状態にしてください。Culling Maskにチェックが入っているものしか、このカメラには映らなくなくなります。

 そして、EffectのLayerをEffectに変更して、CameraEffectのCulling MaskをEffectだけにチェックが入っている状態にしてください。この時、一回Nothingにチェックを入れてから、Effectにチェックを入れると簡単にEffectだけにチェックが入るようにできます。

 

 この状態で再生ボタンを押すと、このようにEffectがImageの上に表示することができるようになりました。

 

・おまけ

 もう一つずつCanvas,Image,Cameraを追加して、これまでと同じように設定すると(CameraのDepthは2に、CanvasのRenderCameraは新しく追加したCameraにする)、EffectをImageの間に挟むことができます。

 

・実用例

 白の点の部分がEffectです。背景とカードの間にEffectを挟むことにより、Effectのせいで、カードが見にくくなることがなくなりました。