LoginSignup
1
3

More than 5 years have passed since last update.

異なる親を持つオブジェクトのヒエラルキー上での順序を比較する

Last updated at Posted at 2017-01-18

同じ親ならGetSiblingIndex()で比較すれば良いのですが、そうでないときのパターンが見つからなかったので書きます。

GetComponentsInParentでTransformを取得すると、[0]に自身のTransformが入り、[1]に1つ上の親Transformが入ります。
2つ上以降も順に格納されるので、2つのオブジェクトのTransformを配列末尾から見ていけば、分岐する親オブジェクトが判明します。
そこでGetSiblingIndex()を使い、受け取ったインデックスを比較することで、どちらが下位にあるかが分かります。

ただし同じシーンに存在するオブジェクト同士であること

int CompareHierarchy(Transform l, Transform r)
{
    if (l == r)
    {
        return 0;
    }

    var lTransforms = l.GetComponentsInParent<Transform>();
    var rTransforms = r.GetComponentsInParent<Transform>();

    var loop = UnityEngine.Mathf.Min(lTransforms.Length, rTransforms.Length);

    for (var i = 0; i < loop; ++i)
    {
        var lTransform = lTransforms[lTransforms.Length - i - 1];
        var rTransform = rTransforms[rTransforms.Length - i - 1];
        if (lTransform != rTransform)
        {
            return rTransform.GetSiblingIndex() - lTransform.GetSiblingIndex();
        }
    }

    return 0;
}

uGUIであればヒエラルキーの並びがそのまま表示順になりますが、カメラやキャンバスを複数使っている場合は、先にそれらの要素でソートする必要があることに注意して下さい。
上記ができれば、同じシーンでないオブジェクト同士でなければならない問題もほぼ解決でしょう

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3