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

nirasan's tech blog

趣味や仕事の覚え書きです。Linux, Perl, PHP, Ruby, Javascript, Android, Cocos2d-x, Unity などに興味があります。

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