画像の手前にTextMeshを表示していたら見る角度によってTextMeshが消えた
今回見つかった問題
Unityのシーン内でTextMeshを特定の画像の手前に表示しようとした時、特定の角度から眺めるとTextMeshのテキストが消えてしまいました。
こんな感じに。
(gifの撮影はScreen To Gifというアプリを使いました)
ちゃんとTextMeshは画像より手前にあるはずなのに突然消えてしまう!
一方向からしか見ないなら問題はないんだけど、ARとかVRでオブジェクトを表示するといろんな角度から眺めることもあるので対応する必要があります。
そのため今回、この問題について調査してみました。
発生状況
- Unity 5.6.2f1
- OS:Windows10
原因
どうもTextMeshではなく、後ろにある画像オブジェクトのMaterialの設定が良くなかったみたいです。
このように、materialのshaderをUnlit/Transparent
にしていました。それを
Unlit/Transparent Cutout
に変えたところTextMeshが消えなくなりました!
おまけ
ビルトインシェーダー
さっきのmaterialのshader、結局どう変わったの?という疑問が自分にあったので、Unityのシェーダー/マテリアルについてちょっと調べました。
ビルトインシェーダー | 内容 |
---|---|
Standard | 石、木、ガラス、プラスチック、金属など「現実世界」のオブジェクトをレンダリングするのに使用され、広範囲のシェーダータイプや組み合わせをサポート |
FX | ライティングとガラスのエフェクト |
GUIとUI | UI グラフィック |
Mobile | モバイル デバイス用に簡素化されたハイパフォーマンス シェーダー |
Nature | 樹木および地形 |
Particles | パーティクルシステムエフェクト |
Skybox | すべてのジオメトリの裏側でレンダリングする背景環境 |
Sprites | 2D スプライトシステムとともに使用 |
Toon | カートゥーン(漫画)風のレンダリング |
Unlit | すべてのライトとシャドウイングを完全にバイパスするレンダリング |
Legacy | スタンダードシェーダーに取って代わられる古いシェーダーの大きい集合 |
シェーダー
シェーダーとは、モデル表面のピクセルの見え方を決めるための、数学的な計算とアルゴリズムを格納したスクリプトです。
シェーダーが定義するのは、
- オブジェクトを描画する方法です。光源の角度や、視野角、そしてその他の関連性のある計算を含む、コードと数学的な計算です。シェーダーでは、エンドユーザーのグラフィックスハードウェアに依存する、さまざまな方法を使う事もできます。
- テクスチャマップや色、その他数々のマテリアルインスペクターで変更できるパラメータ。
マテリアルが定義するのは、
- マテリアルをレンダリングするために使用するシェーダー
- シェーダー パラメーターの特定の値 - テクスチャマップ、色、数的値など
です。