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

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

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

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

Q&A

解決済

2回答

8742閲覧

オブジェクトが後ろに隠れてしまう

sh0u

総合スコア17

Unity

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

0グッド

0クリップ

投稿2019/03/24 05:01

編集2019/03/25 03:27

問題

http://satoukibi.hatenablog.com/entry/2017/02/25/Unity_%E3%81%A7%E3%83%80%E3%83%A1%E3%83%BC%E3%82%B8UI%E3%82%92%E4%BD%9C%E3%82%8B%282D%29
こちらのサイトに書かれている
「文字(TextMesh)を出すオブジェクト」を作ろうとして、
他のオブジェクトの上にインスタンスで文字を出そうとしたら
文字が重なって見えない状態になりました。

期待する結果

他のオブジェクトの上に文字が表示されるようになる
(文字が隠れないようにする)

コード

文字オブジェクト側

csharp

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class DamageTextScr : MonoBehaviour 6{ 7 8 // Use this for initialization 9 void Start() 10 { 11 GetComponent<Rigidbody2D>().AddForce(new Vector3(Random.Range(-80, 80), Random.Range(100, 180), 0)); 12 StartCoroutine(DestroyObject()); 13 } 14 15 private IEnumerator DestroyObject() 16 { 17 yield return new WaitForSeconds(0.6f); 18 Destroy(this.gameObject); 19 } 20}

オブジェクト生成側(一部)

csharp

1 public void Damage() 2 { 3 int i = Mathf.RoundToInt(5 * Random.Range(0.8f, 1.2f)); 4 hpValue -= i; 5 Instantiate(damageText, transform.position, transform.rotation).GetComponent<TextMesh>().text = "" + i; 6 if (hpValue <= 0) 7 { 8 hpGauge.gameObject.SetActive(false); 9 hpBG.gameObject.SetActive(false); 10 } 11 }

試したこと

・Canvasを追加してレイヤー変更
・一度オブジェクトとスクリプトを削除して作り直す
2019/3/25 11:01追記
・TransformのZ軸を変える
・TextMesh側のoffsetZ値を変える
・TextMesh側にSorting Layerを追加→SpriteRendererが付けれないため不可
同日 12:30追記
・Canvasコンポーネントを追加してSortingLayerを変更
・SortingLayerを変更した状態でCanvasのレイヤー変更

使用ソフト

Unity2018.3.9f1 Personal
VisualStudio 2019 RC

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

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

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

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

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

guest

回答2

0

自己解決

他サイトで同様の質問をしたところ、
①Sorting Groupというコンポーネントを追加
②コンポーネント内のSortingLayerを変更
で解決しました!自己解決,マルチポストすみませんでした...
https://twitter.com/sh0ou/status/1110022922582679553

投稿2019/03/25 03:38

sh0u

総合スコア17

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

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

0

「文字を隠しているオブジェクト」が何なのかによるので、まずそこの確認を。
(下記の他、その他「MeshRenderer 重ね順」でググると情報が出るのでそちらも参考にしてください)

3Dオブジェクト(MeshRenderer)の場合

「カメラに対してどちらが手前になっているか」を確認してください。
(カメラのアングルによってはX軸やY軸を変更しないといけないかもしれません)
また、シェーダーによって異なる場合がありますのでそちらもご確認ください。

2Dオブジェクト(SpriteRenderer)の場合

双方の設定によります。
UnityのSpriteRendererとRendererの描画順ルール - 渋谷ほととぎす通信
(文字(TextMesh)は上記で言う「Renderer」に相当します)

uGUIの場合

uGUI側のCanvasの設定が影響します。
【Unity】uGUIよりも手前に3Dオブジェクトを配置したUIを作る - 藍と淡々

投稿2019/03/25 02:32

sakura_hana

総合スコア11427

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

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

sh0u

2019/03/25 03:20

回答ありがとうございます。 TextMeshを付けたオブジェクト,隠しているオブジェクトはどちらも2Dです。 TextMesh側にSpriteRendererを付けて描画順を変更する方法も試しましたが、TextMeshと同時に付いてくるMeshRendererが原因でコンポーネントの追加が出来ません。 (MeshRendererを取り除こうとしてもTextMeshがあるというエラーが出て出来ませんでした) カメラ側のTransformも変更しましたが、同様の結果です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問