UnityのuGUIと同じカメラ内でパーティクルや他のメッシュを重ねたい場合、
Unity2DのSpriteRendererに重ねる場合と同じく、SortingLayerかOrderInLayerで制御可能です。
SortingLayerに対応するシェーダー(Transparent~等)が適用されたRendererがついているGameObjectに、以下のテラシュールブログさんのSortingLayer.csをAddComponentすると、SortingLayerとOrderInLayerの変更が手軽できます。
参考:UnityのSpriteとパーティクルとかモデルの描画順番について
UI側のSortingLayerとOrderInLayerは親であるCanvasで設定された値になるため、
「奥:UI-パーティクル-UI:手前」と挟んで描画したい場合は手前に表示したいUIを別のCanvasの子にする必要があります。
子のCanvasのOverrideSortingにチェックを入れるとLayerの変更ができます。
※Canvasが増えるとその分ドローコールが増えます。

重ねてみた出力結果。

SortingLayerは全てDefault
上のボタンのOrderInLayerは1
下のボタンのOrderInLayerは3
青キューブとパーティクルのOrderInLayerは0
赤キューブとパーティクルのOrderInLayerは2
緑キューブとパーティクルのOrderInLayerは4
青は再背面、赤は中間、緑は最前面に描画されています。
また、以下のようにUI階層にキューブやパーティクルを混ぜた場合、
GameObjectにRectTransformをつければアンカーやピボットの設定も適用されました。

Unity2DのSpriteRendererに重ねる場合と同じく、SortingLayerかOrderInLayerで制御可能です。
SortingLayerに対応するシェーダー(Transparent~等)が適用されたRendererがついているGameObjectに、以下のテラシュールブログさんのSortingLayer.csをAddComponentすると、SortingLayerとOrderInLayerの変更が手軽できます。
参考:UnityのSpriteとパーティクルとかモデルの描画順番について
UI側のSortingLayerとOrderInLayerは親であるCanvasで設定された値になるため、
「奥:UI-パーティクル-UI:手前」と挟んで描画したい場合は手前に表示したいUIを別のCanvasの子にする必要があります。
子のCanvasのOverrideSortingにチェックを入れるとLayerの変更ができます。
※Canvasが増えるとその分ドローコールが増えます。

重ねてみた出力結果。

SortingLayerは全てDefault
上のボタンのOrderInLayerは1
下のボタンのOrderInLayerは3
青キューブとパーティクルのOrderInLayerは0
赤キューブとパーティクルのOrderInLayerは2
緑キューブとパーティクルのOrderInLayerは4
青は再背面、赤は中間、緑は最前面に描画されています。
また、以下のようにUI階層にキューブやパーティクルを混ぜた場合、
GameObjectにRectTransformをつければアンカーやピボットの設定も適用されました。
