NGUI の UIGrid で Sort をカスタマイズする - 名前の降順・名前を数字で評価して降順
はじめに
- Unity の NGUI でリストを表示するとき、UIGrid を利用すると簡単に実装できる。
- Sort 順を既存の "追加順の昇順(None)"、"名前の昇順(Alphabetic)" 意外にしたい場合に対応したメモ。
並び替え評価用の関数を宣言する
- UIGrid.cs にある既存の並び替え評価用関数を参考に作成する
名前の降順で並び替える
static public int SortByNameDesc (Transform a, Transform b) { return string.Compare (b.name, a.name); }
名前を数字で評価して降順に並び替える
- ["22", "1", "3", "10"] を文字列で評価して並び替えると ["10", "1", "22", "3"] という順番になるが、数字に変換して評価することで ["1", "3", "10", "22"] となるようにする
static public int SortByNumericNameDesc (Transform a, Transform b) { decimal d1; decimal d2; if (decimal.TryParse (a.name, out d1) && decimal.TryParse (b.name, out d2)) { return d2.CompareTo (d1); } else { return string.Compare (b.name, a.name); } }
並び替え評価関数を UIGrid で指定する
- インスペクターから UIGrid の Sorting を Custom に変更したうえで、初期化時に並び替え評価関数を指定する
GameObject grid; void Start () { grid = GameObject.Find ("CommentaryBox/Scroll View/Grid"); grid.GetComponent<UIGrid> ().onCustomSort = SortByNameDesc; }