子供のTrasnformをsortする拡張

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;});