UnityのuGUIのデフォルトでは、CanvasのRender ModeがScreen Space - Overlayに設定されています。Overlayの場合、UI要素は常に最前面に表示されるため、3DのオブジェクトはuGUIに隠れることになります。パーティクルも3Dでレンダリングされるため、uGUIの後ろに表示されます。

uGUIの上にパーティクルを表示したい場合、CanvasのRender ModeにScreen Space - Cameraを設定することになります。Screen Space - CameraではuGUIのレンダリング先プレーンのZ値を指定できるため、uGUIよりも大きなZ値でレンダリングすれば、パーティクルが前面に来ます。

しかし、3Dのゲームを作っており、3Dの背景の上にuGUIを表示する場合、Screen Space - Cameraを設定すると、Z値の大きな3D要素もuGUIの上に表示されてしまいます。パーティクルのみを前面に持ってくることができません。

この問題を解決するには、複数のカメラを使用します。まず、シーンに2つのカメラを配置します。1つめのカメラのCulling MaskからUIを外します。2つめのカメラのCulling MaskをUIのみにします。2つめのカメラのClear FlagsをDepth onlyにします。パーティクルのLayerをUIにします。

こうすると、背景の3Dのシーンを1つ目のカメラでレンダリングした後、Z値をクリアして、2つ目のカメラでUIとパーティクルがレンダリングされます。中間でZ値がクリアされるため、UI要素は常に3Dの上に表示することができます。

カメラを分けることで、好きなImage Effectをかけることもできるので便利です。