Trasnformをsortしたいことがしばしばあったので書いてみました。
もっと軽量にできそうだけどざっくり。
public static class TransformExtensions { private class Comparer : IComparer<Transform> { public Func<Transform, Transform, int> func; public Comparer(Func<Transform, Transform, int> func) { this.func = func; } public int Compare(Transform a, Transform b) { return this.func(a, b); } } public static void SortChildren(this Transform t, Func<Transform, Transform, int> func) { Transform[] children = new Transform[t.childCount]; for (int i = 0; i < children.Length; i++) { children[i] = t.GetChild(i); } var comparer = new Comparer(func); Array.Sort(children, comparer); foreach (var child in children) { child.SetAsLastSibling(); } } }
使い方としては、たとえばsortTransformというtransform以下のHogeというコンポーネントのindexでソートする場合、
sortTransform.SortChildren((a, b) => { return a.GetComponent<Hoge>().index - b.GetComponent<Hoge>().index;});