質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

3473閲覧

Screen Space - Overlay のときの子オブジェクトの挙動について。

退会済みユーザー

退会済みユーザー

総合スコア0

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

2グッド

0クリップ

投稿2017/08/14 13:26

###前提・実現したいこと

CanvasがScreen Space - Overlay のとき、Canvasの子オブジェクトのUI系のオブジェクト(例えば、ImageとかButtonとか)の
Rect TransformのPos Zの値は、実質、無効なのでしょうか?
このPos Zの値を変えても(UIオブジェクトを前面に移動させたり、奥に移動させたりしても)、ゲーム画面上でのUIオブジェクトのサイズ(見え方)は変わらないように見えます。
Screen Space - Overlay のとき、このPos Zの値を変えて影響が出る場合があれば教えていただきたいです。

ちなみに、Canvasの方は、Screen Space - Overlayにすると、Rect Transformの設定が無効なのは確認済みです。
Canvasのように、Rect Transformのインプットフィールド自体が無効になっていれば、無効であることがわかりやすいのですが、
Canvasの子オブジェクトのUIオブジェクトは、Pos Zの値が変更できてしまうので、このPos Zの影響が何なのか気になります。
また、もし可能であれば、UIオブジェクトのPos Zが無効だった場合、それについて説明されているマニュアルや、サイトなども教えていただきたいです。

イメージ説明

###試したこと
Pos Zを変更してみたけど、見かけ上は変化がわからない。

KiyoshiMotoki, Bongo👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

「オブジェクトの描画優先度」に影響します。
詳しくはこちら参照。「uGUI 描画優先度のチートシート - Aiming 開発者ブログ

投稿2017/08/15 00:30

sakura_hana

総合スコア11427

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/15 11:34

ご回答ありがとうございます。 Screen Space - Overlayには、遠近法という概念はないのですね。 遠近法の見え方ばかり気にしていて、描画順に関係することに気づきませんでした。 しかし、試してみたのですが、Screen Space - OverlayではPos Zよりもヒエラルキーの順番の方が描画順に影響する優先度が高いみたいなので、Screen Space - Overlayでは、実質、Pos Zの値は意味がないものと解釈しました(間違っていればご指摘お願い致します。) ありがとうございました。
sakura_hana

2017/08/15 12:10

ほとんど起こり得ない(使わない)のですが、 ・CanvasAとCanvasBの下にそれぞれImageAとImageBが子として付いている。 ・CanvasAとCanvasBはどちらも「Screen Space - Overlay、Sort Order 0」。 ・ヒエラルキー上はCanvasAが上、CanvasBが下。 という配置をしている時にImageBのPosZを変えると重ね順が変わるのが分かります。 但しScene画面上だと即時変わるのですが、Game画面上だと「両方のCanvasをオンオフ」しないと切り替わりません。 これは恐らくゲーム上ではPosZ値の変更では「Canvasの再描画」が行われない為だと思われます。 (PosXやPosYを変えた時には即時Canvasの再描画が行われて正しい描画が行われます。  これはそこそこ重い処理らしいので、PosZの場合は明示的にCanvasの描画を切り替えないと反映しない、みたいな仕様にしているものと思います) ちなみに同じCanvasの下にあるImageはPosZを無視し、ヒエラルキーの上下で重ね順を決めているようです。 (上記の例で言うとCanvasAの子としてImageAとImageBを置くと、PosZは完全に無視されます) つまり「PosZは多くのケースで意味は無い」と言えますが、特殊なケースでハマるかもしれないなー、その時に覚えておくといいかもなー(でも普通はCanvasが異なる場合、SortOrderで並び順を決めているだろうからやっぱりまず起きないよなー)ぐらいの印象です。
退会済みユーザー

退会済みユーザー

2017/08/15 13:03

ご回答ありがとうございます。 なるほど、Screen Space - Overlayでもそのような特殊な場合にPos Zが影響してくるのですね。 理解が深まりました。 ありがとうございます。
退会済みユーザー

退会済みユーザー

2017/08/16 13:12

すみません、上記の特殊なケースを検証してみたのですが、Pos Zの値に関係なく、Canvasをオンオフして、最後にCanvasをオンにしたもののImageオブジェクトが前面に表示されるように見えました。 私の検証方法が間違っているのかもしれないので、恐縮ですが。
sakura_hana

2017/08/17 05:38

本当ですね、ちゃんと見てませんでした。 Sceneビューの方では正しく並べ替えられているので、描写側のバグか、別の要因があるのか…… 今後正しく動作するようになるかもしれないので、その時に不具合を起こさないよう、今は「PosZは無意味な値ではあるが、常に0にしておく」でよいのではないかと思います。
退会済みユーザー

退会済みユーザー

2017/08/18 08:22

ご回答ありがとうございます。 Pos Zはそのように扱うことを心得ます。 ありがとうございます。
guest

0

マニュアル等でScreen Space - Overlay時のZについてそれらしい解説は見つけられませんでしたが、少し試した感じではZ座標はシェーダーまで伝達されているようですので、Z座標を使って何かするUI用シェーダー(実例があるのかは分かりませんが...)では影響が現れるかもしれません。

UI/Defaultシェーダーを見てみると、深度判定の設定はZWrite OffZTest [unity_GUIZTestMode]となっていました。unity_GUIZTestModeについては、ここの解説によるとScreen Space - Overlayの時はAlways、それ以外ではLEqualに自動的に設定してくれるもののようでした。ですので、普通に使う限りはZ座標の前後関係がどうであっても、ヒエラルキー上の順序に従って重ね描きされていくのかと思います。

試しにButtonとDropdownを配置して(モードはOverlayのまま)、Buttonを貫通するようにDropdownを回転してみたところ、UI/Defaultでは奥行きを無視してヒエラルキーの順序に従って描画され、ZWrite OnZTest LEqualに書き換えたシェーダーの場合は貫通しているように描画されました。

UI/DefaultZWrite On, ZTest LEqual
DefaultCustom

ただ、先に挙げた解説の中でも注意書きがありましたが、自分でUI用シェーダーを作る場合も深度判定設定はZWrite OffZTest [unity_GUIZTestMode]のままにした方がいいような気がします。奥行きを活かした表現をしたい場合はOverlay以外のモードを使うのが無難ではないでしょうか?

投稿2017/08/15 00:41

Bongo

総合スコア10807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/15 11:36

ご回答ありがとうございます。 UI/Defaultシェーダーや深度判定の設定のZWrite Off、ZTest [unity_GUIZTestMode]のこと等、全然知りませんでした。勉強して参りたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問