1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Unity]ランキング全体の中からn個ずつ表示

Posted at

経緯

Unityでランキングを表示する機能を実装する際、今までランキングのリストの要素全てを一度に表示するようにしていました。ぶっちゃけそんなにユーザーもいないからそのままでも良かったのですが、すぐ実装できる気がしたのでやってみました。

実装した機能

ランキング全体の中から一部の範囲に絞って表示する。
1ページ目は1位〜30位まで表示して、次のページボタンを押すと31位〜60位まで表示される的な奴。

流れ

  1. ランキングの元になるリストを取得(サーバーなどから)
  2. 取得したリストを並べ替える(レートの高い順など)
  3. 何番目から何番目まで表示するかのインデックスリストを作る(例:そのリストが[0,30,60]の場合、1ページ目で1位〜30位,2ページ目で31位〜60位までが表示される)
  4. 3で作成したインデックスリストを利用してランキングを表示する

コード

SetRanking

引数startの数からendの数までリストを回す。
ここでランキング表示用のprefabを生成しています。SetContentメソッドでそのprefab内のテキストを変更していますが、今回はそこがメインではないので割愛します。

SetRanking
public void SetRanking(int start, int end, List<UserData> list)
{
    end = (end>list.Count)?list.Count:end;
    for(int i=start;i<end;i++){
        Transform prefab = Instantiate(original, content).transform;
        UserData data = all[i];
        SetContent(data,prefab);
    }
}

SplitIndex

引数splitCountはランキングを何個ごとに分けるかを決めます。
引数listCountにはランキングの元となるリストの長さを与えます。
splitCount:30, listCount:120 みたいな感じにすると
[0,30,60,90,120]というリストが得られます。
これをindexListという変数に保持しておきます。

SplitIndex
List<int> SplitIndex(int splitCount, int listCount)
{
    List<int> list = new List<int>();
    int num = 0;
    while(true){
        list.Add(num);
        num += splitCount;
        if(num>=listCount) {
            list.Add(listCount);
            break;
        }
    }
    return list;
}

ChangeIndex

上二つを実装できればあとは単純です。
現在のページ番号を保持する currentIndex みたいな変数を用意します。そしてSetRanking(indexList[currentIndex],indexList[currentIndex+1],all);
とすることで[0,30,60,90,120]というリストがあり、例えば1ページ目を表示したいときはcurrentIndex = 0とすることでリストの0番目から29番目を取得できます、

ChangeIndex
public void ChangeIndex(int n)
{
    currentIndex += n;
    if(currentIndex<0)currentIndex=0;
    else if(currentIndex>indexList.Count-2) currentIndex = indexList.Count-2;
    SetRanking(indexList[currentIndex],indexList[currentIndex+1],all);
}
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?