読者です 読者をやめる 読者になる 読者になる

さけのさかなのブログ

同人ゲーム開発やってます。Unity使ったりする。

ヒエラルキーでの位置を比較する

Unity

やること

 共通の親オブジェクトをもつ複数のオブジェクトがあるとして、ヒエラルキー上でのオブジェクトの上下関係をしらべる。

 今回しらべる上下関係というのは、ヒエラルキーウィンドウを展開したときにオブジェクトが並ぶ順番であり、これはUnityUIだと描画順に相当する。

コード

public double GetHierarchyPosition(Transform parent, Transform child)
{
    double result = 0.0;
    var current = child;
    while (current != parent)
    {
        if (!current || !current.parent)
        {
            return double.NegativeInfinity;
        }
        var index = current.GetSiblingIndex();
        var count = current.parent.childCount;
        result += (double)(index + 1);
        result /= (double)(count + 1);
        current = current.parent;
    }
    return result;
}

 という感じで返ってくるdouble同士を比較すれば良い。値が小さいほうが上。

 加算と除算の繰り返しなので、丸め誤差を考えると非っっ常に嫌な気分になるものの、まあ、doubleだし?どうせそんな大量のオブジェクトつくらないし?という感じで勘弁してつかーさい。

(親オブジェクトをたどりながらGetSiblingIndex()で配列をつくってそれを比較すれば間違いない)