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

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

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

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

1回答

2516閲覧

[Unity]レイヤーの順序を守りつつ、z軸の表示を優先してほしい

regonili

総合スコア6

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

0クリップ

投稿2020/11/10 05:55

編集2020/11/11 06:52

やったこと

同じz軸上に複数の画像を乗せたいが、角度によって表示がブレるので、(左)
「レイヤーの順序」や「Sorting Group」を使用してどの角度でも同じに見えるようにした。(右)
イメージ説明

発生した問題/試したこと

奥に行っても手前に表示される。
イメージ説明
z軸に合わせて「レイヤーの順序」や「Sorting Group」の数字を変更した。
イメージ説明

解決しきれなかった問題

このオブジェクトはかなり動くから、毎フレームレイヤーの順序を変更するのは重そう。
後ろから見たときに奥のほうが手前に表示されてしまう。

できれば…

負荷は多少なら良いが、あまりかけたくない。
演出として、枠だけ動かしたりなどをしたいので、1つの画像として処理はしたくない。

補足

この方法の原型が残っていなくても、解決できれば方法は問いません。
オブジェクトの中身
イメージ説明

Unity 2020.1.12f1 (常に最新版を使う予定)
Windows 10

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

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

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

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

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

guest

回答1

0

ベストアンサー

すごく素朴な案なんですけども、下図のように三角形部分だけわずかにずらしてみるのはダメでしょうかね(背景と三角形のZ座標が本当にぴったり同じでないと何かまずいことがあるでしょうか)?

図1

念のためFrame Debuggerで描画過程を見てみると奥から順に背景→三角形→背景→三角形→...と描画されたようですし、

図2

背面から見れば三角形は背景に隠れて見えなくなりました。

図3

##追記

背景を下図のようなメッシュにして...

図4

Wavefront

1# 64 vertex positions 2v -37.5 50 0 3v -37.5 46.875 0 4v 37.5 46.875 0 5v 37.5 50 0 6v 41.149174 46.138271 0 7v 42.365566 49.017689 0 8v 44.129128 44.129128 0 9v 46.338837 46.338837 0 10v 46.138271 41.149174 0 11v 49.017689 42.365566 0 12v 46.875 37.5 0 13v 50 37.5 0 14v 46.875 -37.5 0 15v 50 -37.5 0 16v 46.138271 -41.149174 0 17v 49.017689 -42.365566 0 18v 44.129128 -44.129128 0 19v 46.338837 -46.338837 0 20v 41.149174 -46.138271 0 21v 42.365566 -49.017689 0 22v 37.5 -46.875 0 23v 37.5 -50 0 24v -37.5 -46.875 0 25v -37.5 -50 0 26v -41.149174 -46.138271 0 27v -42.365566 -49.017689 0 28v -44.129128 -44.129128 0 29v -46.338837 -46.338837 0 30v -46.138271 -41.149174 0 31v -49.017689 -42.365566 0 32v -46.875 -37.5 0 33v -50 -37.5 0 34v -46.875 37.5 0 35v -50 37.5 0 36v -46.138271 41.149174 0 37v -49.017689 42.365566 0 38v -44.129128 44.129128 0 39v -46.338837 46.338837 0 40v -41.149174 46.138271 0 41v -42.365566 49.017689 0 42v 37.5 43.75 0 43v -37.5 43.75 0 44v -37.5 37.5 0 45v 37.5 37.5 0 46v 43.75 -37.5 0 47v 43.75 37.5 0 48v 37.5 -37.5 0 49v -37.5 -43.75 0 50v 37.5 -43.75 0 51v -37.5 -37.5 0 52v -43.75 37.5 0 53v -43.75 -37.5 0 54v 43.258846 39.932781 0 55v 39.932781 43.258846 0 56v 41.919418 41.919418 0 57v 43.258846 -39.932781 0 58v 41.919418 -41.919418 0 59v 39.932781 -43.258846 0 60v -43.258846 -39.932781 0 61v -39.932781 -43.258846 0 62v -41.919418 -41.919418 0 63v -39.932781 43.258846 0 64v -43.258846 39.932781 0 65v -41.919418 41.919418 0 66 67# 64 UV coordinates 68vt 0.125 1 0 69vt 0.125 0.96875006 0 70vt 0.87500006 0.96875006 0 71vt 0.87500006 1 0 72vt 0.91149175 0.96138275 0 73vt 0.92365569 0.99017692 0 74vt 0.94129133 0.94129133 0 75vt 0.96338838 0.96338838 0 76vt 0.96138275 0.91149175 0 77vt 0.99017692 0.92365569 0 78vt 0.96875006 0.87500006 0 79vt 1 0.87500006 0 80vt 0.96875006 0.125 0 81vt 1 0.125 0 82vt 0.96138275 0.088508248 0 83vt 0.99017692 0.076344311 0 84vt 0.94129133 0.058708727 0 85vt 0.96338838 0.036611617 0 86vt 0.91149175 0.038617253 0 87vt 0.92365569 0.0098231435 0 88vt 0.87500006 0.03125 0 89vt 0.87500006 0 0 90vt 0.125 0.03125 0 91vt 0.125 0 0 92vt 0.088508278 0.038617253 0 93vt 0.076344334 0.0098231435 0 94vt 0.058708742 0.058708727 0 95vt 0.036611635 0.036611617 0 96vt 0.038617279 0.088508248 0 97vt 0.0098231202 0.076344311 0 98vt 0.03125 0.125 0 99vt 0 0.125 0 100vt 0.03125 0.87500006 0 101vt 0 0.87500006 0 102vt 0.038617279 0.91149175 0 103vt 0.0098231202 0.92365569 0 104vt 0.058708742 0.94129133 0 105vt 0.036611635 0.96338838 0 106vt 0.088508278 0.96138275 0 107vt 0.076344334 0.99017692 0 108vt 0.87500006 0.93750006 0 109vt 0.125 0.93750006 0 110vt 0.125 0.87500006 0 111vt 0.87500006 0.87500006 0 112vt 0.93750006 0.125 0 113vt 0.93750006 0.87500006 0 114vt 0.87500006 0.125 0 115vt 0.125 0.0625 0 116vt 0.87500006 0.0625 0 117vt 0.125 0.125 0 118vt 0.0625 0.87500006 0 119vt 0.0625 0.125 0 120vt 0.93258852 0.89932787 0 121vt 0.89932787 0.93258852 0 122vt 0.91919428 0.91919428 0 123vt 0.93258852 0.10067219 0 124vt 0.91919428 0.080805838 0 125vt 0.89932787 0.067411542 0 126vt 0.067411534 0.10067219 0 127vt 0.10067219 0.067411542 0 128vt 0.080805823 0.080805838 0 129vt 0.10067219 0.93258852 0 130vt 0.067411534 0.89932787 0 131vt 0.080805823 0.91919428 0 132 133# 1 vertex normals 134vn 0 0 1 135 136# Mesh 'SignBackground' with 66 faces 137g SignBackground 138f 1/1/1 2/2/1 3/3/1 139f 3/3/1 4/4/1 1/1/1 140f 4/4/1 3/3/1 5/5/1 141f 5/5/1 6/6/1 4/4/1 142f 6/6/1 5/5/1 7/7/1 143f 7/7/1 8/8/1 6/6/1 144f 8/8/1 7/7/1 9/9/1 145f 9/9/1 10/10/1 8/8/1 146f 10/10/1 9/9/1 11/11/1 147f 11/11/1 12/12/1 10/10/1 148f 12/12/1 11/11/1 13/13/1 149f 13/13/1 14/14/1 12/12/1 150f 14/14/1 13/13/1 15/15/1 151f 15/15/1 16/16/1 14/14/1 152f 16/16/1 15/15/1 17/17/1 153f 17/17/1 18/18/1 16/16/1 154f 18/18/1 17/17/1 19/19/1 155f 19/19/1 20/20/1 18/18/1 156f 20/20/1 19/19/1 21/21/1 157f 21/21/1 22/22/1 20/20/1 158f 22/22/1 21/21/1 23/23/1 159f 23/23/1 24/24/1 22/22/1 160f 24/24/1 23/23/1 25/25/1 161f 25/25/1 26/26/1 24/24/1 162f 26/26/1 25/25/1 27/27/1 163f 27/27/1 28/28/1 26/26/1 164f 28/28/1 27/27/1 29/29/1 165f 29/29/1 30/30/1 28/28/1 166f 30/30/1 29/29/1 31/31/1 167f 31/31/1 32/32/1 30/30/1 168f 32/32/1 31/31/1 33/33/1 169f 33/33/1 34/34/1 32/32/1 170f 34/34/1 33/33/1 35/35/1 171f 35/35/1 36/36/1 34/34/1 172f 36/36/1 35/35/1 37/37/1 173f 37/37/1 38/38/1 36/36/1 174f 38/38/1 37/37/1 39/39/1 175f 39/39/1 40/40/1 38/38/1 176f 40/40/1 39/39/1 2/2/1 177f 2/2/1 1/1/1 40/40/1 178f 41/41/1 42/42/1 43/43/1 179f 43/43/1 44/44/1 41/41/1 180f 45/45/1 46/46/1 44/44/1 181f 44/44/1 47/47/1 45/45/1 182f 48/48/1 49/49/1 47/47/1 183f 47/47/1 50/50/1 48/48/1 184f 51/51/1 52/52/1 50/50/1 185f 50/50/1 43/43/1 51/51/1 186f 41/41/1 44/44/1 46/46/1 187f 46/46/1 53/53/1 41/41/1 188f 54/54/1 41/41/1 53/53/1 189f 53/53/1 55/55/1 54/54/1 190f 56/56/1 45/45/1 47/47/1 191f 47/47/1 49/49/1 56/56/1 192f 57/57/1 56/56/1 49/49/1 193f 49/49/1 58/58/1 57/57/1 194f 48/48/1 50/50/1 52/52/1 195f 52/52/1 59/59/1 48/48/1 196f 60/60/1 48/48/1 59/59/1 197f 59/59/1 61/61/1 60/60/1 198f 51/51/1 43/43/1 42/42/1 199f 42/42/1 62/62/1 51/51/1 200f 63/63/1 51/51/1 62/62/1 201f 62/62/1 64/64/1 63/63/1 202f 50/50/1 47/47/1 44/44/1 203f 44/44/1 43/43/1 50/50/1

マテリアルは下記のように不透明両面描画とし...

ShaderLab

1Shader "Unlit/Opaque (Double Sided)" 2{ 3 Properties 4 { 5 _MainTex ("Texture", 2D) = "white" {} 6 } 7 SubShader 8 { 9 Tags { "Queue"="Geometry" "RenderType"="Opaque" } 10 11 Cull Off 12 13 Pass 14 { 15 CGPROGRAM 16 #pragma vertex vert 17 #pragma fragment frag 18 #pragma multi_compile_fog 19 #pragma multi_compile_instancing 20 21 #include "UnityCG.cginc" 22 23 struct appdata 24 { 25 float4 vertex : POSITION; 26 float2 uv : TEXCOORD0; 27 UNITY_VERTEX_INPUT_INSTANCE_ID 28 }; 29 30 struct v2f 31 { 32 float2 uv : TEXCOORD0; 33 UNITY_FOG_COORDS(1) 34 float4 vertex : SV_POSITION; 35 }; 36 37 sampler2D _MainTex; 38 float4 _MainTex_ST; 39 40 v2f vert(appdata v) 41 { 42 v2f o; 43 UNITY_SETUP_INSTANCE_ID(v); 44 o.vertex = UnityObjectToClipPos(v.vertex); 45 o.uv = TRANSFORM_TEX(v.uv, _MainTex); 46 UNITY_TRANSFER_FOG(o,o.vertex); 47 return o; 48 } 49 50 fixed4 frag(v2f i) : SV_Target 51 { 52 fixed4 col = tex2D(_MainTex, i.uv); 53 UNITY_APPLY_FOG(i.fogCoord, col); 54 return col; 55 } 56 ENDCG 57 } 58 } 59}

前面のTextMesh ProオブジェクトのZ座標は背景から0.001ずらしたところ、ちょっと確認した限りでは見た目上の不自然さはなさそうでした。

図5

投稿2020/11/11 12:07

編集2020/11/11 21:11
Bongo

総合スコア10807

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

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

regonili

2020/11/11 15:22

わざわざ再現までしていただいての回答ありがとうございます! 後出しで申し訳ないのですが、三角形は常にスクリプトによって上下に動いていて、 もしかしたら文字も使うかもしれないのでText mesh proでやっているのが原因なのか、 見る角度によっては動いてる最中に背景の後ろにいってしまうんですよね… (それとこのゲームでは無いんですが、前に作っていたゲームでこの方法をやると結構表示がブレるので軽いトラウマ?のような、z軸だけだとバグりそう…って考えが自分を邪魔してますね…)
Bongo

2020/11/11 21:13

なるほど、確かに三角形をTextMesh Proの文字にしてみたところ0.001程度のずらし量では前後判定ができないようでした。 0.1程度までずらせばかなり改善したものの、これだと三角形が看板からけっこう浮いて見えてしまううえに、浅い角度からではこれだけずらしてもまだ前後判定の正確さに不満が残りました。 やはり「半透明オブジェクト同士が重なり合っている」という状況では、前後関係を正しく描画するのが困難なのはしかたないところがありますね。妥協して、せめて背景の看板側だけでも不透明オブジェクトにするわけにはいかないでしょうか?こちらなら前景側のずらし量が0.001でもいい感じに描画されているように見えました。 不透明オブジェクトならデプスバッファによる正確な前後関係判定ができますし、半透明オブジェクトのように奥から順番に描いていく必要がないためオーバードロー回避・フィルレート節約の観点からも利点が大きいと思います。 背景側も半透明対応でないとまずいようでしたら、前景にTextMesh Proを使うことや前景・背景が独立して動くことを考慮すると、ご質問者さんのおっしゃるレイヤー順序の随時調整はかなり最適解に近いんじゃないかという気がします。その方式をベースに、後は背面から見た時に前景がちゃんと隠れる調整方法を検討する方針の方がいいかもしれませんね。看板に対してカメラが前方にあるか後方にあるかで前景と背景の描画順序を切り替える...とかでしょうか?
regonili

2020/11/12 14:28

ありがとうございます。自分の中で考えが凝り固まっていたので、参考になりました。いろいろ試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問