げぇむぷろぐらみんぐ

日々の生活で得た知識、経験を書きます

【Unity】ScreenSpace OverlayなCanvas上に3Dモデルを表示する

はじめに

通常、ScreenSpaceをOverlayに指定した場合は最前面にCanvas上のUIの描画が来るため、3Dモデルをさらにその上に表示することはできません。 今回は、Canvasの設定はOverlayにしておきたいが、3DモデルをUIの上に表示したい!という場合の対応方法の一つをやってみたのでまとめます。

完成形

以下のようにOverlayなCanvasのUI上に3D表示を行い、それを切り替えることができるようになります。

f:id:siguma_sig:20180908231417g:plain

やり方

やり方は単純で、3Dモデルの描画をRenderTextureに行いCanvas上ではRawImageでそのRenderTextureの表示を行えば完了です。

順を追って具体的に説明します。

RenderTextureの作成

Projectウィンドウで Create > RenderTextureで作成できます。 細かい設定が気になる方はこちらを見てください。

f:id:siguma_sig:20180908232123p:plain

3Dモデル描画用のカメラを作成

Hierarchy上でメニューから選択してCameraを新しく作ります。その際に、ClearFlagsをSolidColorにしてアルファ値を0にしておいてください。 また、先ほど作成したRenderTexutreをTargetTextureに設定してください。

f:id:siguma_sig:20180908232232p:plain

RawImageの配置

OverlayなCanvas上にRawImageを配置して、Textureに先程作成したRenderTextureを設定します。

f:id:siguma_sig:20180908232442p:plain

カメラの微調整

これで新しく作成したカメラに描画されているものがUIとして表示されるようになります。 写したい3Dモデルが映るような位置に微調整をしましょう。

まとめ

同様な方法で、パーティクルに関してもOverlayなCanvasの上に表示を行うことができます。 ただし、RenderTextureへの描画を行うためにCameraを一つ作成する必要があるため、パフォーマンスのことを考えるとUI上に3Dモデルをばんばん出したいという場合には向いていないかもしれません。

OverlayのままUI上に3Dモデルを表示できるいい方法が他にあれば是非教えてください。