ヒエラルキーでの位置を比較する
やること
共通の親オブジェクトをもつ複数のオブジェクトがあるとして、ヒエラルキー上でのオブジェクトの上下関係をしらべる。
今回しらべる上下関係というのは、ヒエラルキーウィンドウを展開したときにオブジェクトが並ぶ順番であり、これは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()で配列をつくってそれを比較すれば間違いない)