こんにちは。ヤマヤタケシです。
ゲームとかでよくある表現ですけど、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]実行中に表示順序を変えるを参考にしました!
そんじゃまた。