Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What is going on with this article?
@haquxx

uGUIよりも手前にメッシュのオブジェクトを描画したい

More than 1 year has passed since last update.

Canvasの設定を変更する

3種類のRender Modeを使い分ける

01.png

  • Screen Space - Overlay
  • Screen Space - Camera
  • World Space

① Screen Space - Overlay

常にUIが最前面で描画されます。

Canvas同士の描画順はSort Orderで制御することが可能です。
Sort Orderの値が大きいほど手前に描画されます

01.JPG

UIが最前面張り付きになるので、このモードの時にはMeshをuGUIよりも手前に描画することはできません。

MeshやParticleの描画順を前後させたい時にはScreen Space - Camera、もしくはWorld Spaceを使う必要があります。

Sort Orderが出てきた後で紛らわしいですが、Sprite RendererやParticle System、Mesh RendererにはSorting LayerOrder in Layerという2つのパラメーターが存在します。

これによってそれぞれの描画順を制御することができます。

Sorting Layer & Order in Layer

階層としてはSorting Layerの中にOrder in Layerがあります。

なのでSorting Layerで描画順を大別し、Order in LayerでLayer内の描画順を細かく制御します。

Sorting Layerは初期状態ではDefaultしかないので自分で追加してあげる必要があります。

02.JPG

BackとForwardを足しました。
上にあるほど奥に、下にあるほど手前に描画されます。

Sorting Layerが設定されていないと、基本的にはZ値を基に描画順は変わります。
カメラより遠いものを先(奥)に描画し、近いものは後(手前)に描画します。

03.JPG

真ん中の画像をDefaultをBackにし、他はDefaultのままにするとこのようになります。

04.JPG

描画順がZ値に関係なく、Sorting Layerの順で描画されるようになりました。

全てのSorting LayerをDefaultに戻し、一番奥の画像のOrder in Layerを1にしてみます。

05.JPG

Order in Layerが0のものより手前に描画されるようになりました。

② Screen Space - Camera

Order in Layerを使うためにモードをScreen Space - Cameraに変更します

ここで注意が必要なのがRender CameraがNoneのままだと、Screen Space - Overlayと描画結果が変わらないままになってしまいます。

06.JPG

Warningに書かれているようにScreen Space - Overlayと同じ挙動になります。

Cameraを設定した状態でPlane Distanceを使うことでカメラとUIの間にMeshを描画できるようになります。

Plane DistanceとはカメラとUIの距離を指しており、この値が例えば3だとカメラとUIの間に3m分のスペースがあるのでそこに配置されたオブジェクトはUIよりも手前に描画されます。

07.JPG

08.JPG

③ World Space

これは3次元空間にUIを配置するモードなので他のGameObjectと同じようにZ値を基に描画順が制御されます。

他のモードではUIが画面張り付きだったのに対し、回転した状態で配置することもできます。
普通のGameObjectのような感覚で扱うことが可能になります。

このモードでもSorting LayerやOrder in Layerを使って描画順を制御することが可能です。

uGUIよりも手前にメッシュのオブジェクトを描画するには

Screen Space - Cameraか、WorldSpaceを使うことで実現できます。

Mesh Rendererを使ったオブジェクトはSorting Layer、Order in Layerのパラメーターがインスペクター上にありませんが、スクリプトから変更可能です。

テラシュールブログさんの記事が参考になります。
UnityのSpriteとパーティクルとかモデルの描画順番について

Sorting LayerやOrder in Layerを使わなくても、基本的には手前に描画されてほしいものをカメラの近くに配置すれば問題ありません。

2
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
haquxx

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
2
Help us understand the problem. What is going on with this article?