こんにちは。ヤマヤタケシです。
ゲームとかでよくある表現ですけど、3Dのターゲットに2Dのテキストを重ねたくなりますね。
そんなとき、UnityのuGUIだと、Zによって自動的にソートなどはされません。
ヒエラルキーの順番に描画されます。
なので、3Dオブジェクトのカメラに映ったときのZに応じて親子関係をいじりましょう。
そんなコードはこちら!
public class MyText : MonoBehaviour { public Transform target; // 3Dのターゲット void Update() { var sp = Camera.main.WorldToScreenPoint(target.position); SortKey = sp.z; } public float SortKey { get; private set; } } public class Manager : MonoBehaviour { void LateUpdate() { // ターゲットのZに応じてソートする。 var list = GetComponentsInChildren(); Array.Sort(list, (a, b) => { var delta = a.SortKey - b.SortKey; if (delta < 0) { return 1; } if (0 < delta) { return -1; } return 0; }); for(var n = 0; n < list.Length; ++n) { list[n].transform.SetSiblingIndex(n); } } }
[uGUI]実行中に表示順序を変えるを参考にしました!
そんじゃまた。