またろうのSteamworksブログ

Steamworks(Steam Direct)についての開発ネタを纏めています。

Steamのランキング機能を実装する



今回はSteamのランキング機能の実装について書きます。

ランキングはSteamクライアント→コミュニティでゲームを選択して
右上のデータを表示からグローバルランキングを選択すると表示されます。

f:id:tsukinowaapp:20180817081918p:plain

また、ゲーム上に実装することも可能です。

Steamworks側の設定

ホーム→アプリ管理(アプリデータ管理)のデータ&実績タブから
「ランキング」を選択

f:id:tsukinowaapp:20180817095411p:plain

「ランキングを追加」に入力します。

名前(Name):APIから呼び出すときの名前を入力(API名)
コミュニティ名(Community Name):コミュニティに表示するときの名前を入力
並べ替え方法(Sort Method):並べ替え順を指定します。(得点が多い順なら降順)
表示タイプ(Display Type):単位を数字、秒、ミリ秒から選択します。
書き込み (Writes):「信頼済み」に設定するとクライアントから設定できなくなり、WebAPIからのアクセスのみ許可するようになります。(基本は設定しません)
読み取り (Reads):「フレンド」に設定するとゲームからはフレンドデータのみしか読み込めなくなります。(基本は設定しません)

全て設定したら右側の「作成」リンクをクリックでランキングが作成されます。
「ランキング を作成しました。このページを更新すると以下に表示されます。」と表示されたらリロードします。
画面下の「ランキング:」に黒帯で作成したランキングが表示されている筈です。

Unity側のコーディング

Google検索などで直接このページにいらしたかたは下のリンクを確認して
Steamworks.NETの設定まで済ませておいてください。

tsukinowa.hatenablog.jp

最も楽な方法

assetstore.unity.com

一番楽な方法は上記アセットを取り込んで、下記コードを追加します。
但し上記のアセットは有料($1.99)です。

using EasySteamLeaderboard;
EasySteamLeaderboards.Instance.UploadScoreToLeaderboard("XP Rank", score, (result) =>
        {
            if (result.resultCode == ESL_ResultCode.Success)
            {
                Debug.Log("Succesfully Uploaded!");
            }
            else
            {
                Debug.Log("Failed Uploading: " + result.resultCode.ToString());
            }
        });

EasySteamLeaderboards.Instance.UploadScoreToLeaderboardの
第一引数にリーダーボードのAPI
第二引数にスコアなどの設定したい値
第三引数に更新後の処理を書きます。

ゲーム上にランキングを表示する

Easy Steam Leaderboardsにはランキング表のPrefabがあるので、それを取り込むだけでOKです。
但し、見栄えを修正したり、不要な機能を取っ払ったりという修正は必要です。
(特に任意のスコアを送信できてしまう機能は必ず削除してください)

f:id:tsukinowaapp:20180817142613p:plain

自分で書こうとすると…

Statsの更新に比べると、それなりに手間です。
SteamUserStats.FindLeaderboardでリーダーボードがあるか検索し、
コールバックでSteamLeaderboard_tというインスタンスを生成してから
SteamUserStats.UploadLeaderboardScoreを呼び出す、という処理を書かないといけないのですが
結局EasySteamLeaderboardのソースを部分的にパクる感じになりますし、
抜粋して掲載するのもあまり宜しくないので
2ドル払って数行で済ました方がいいかなと思ってしまいます。

HTML5の場合は?

greenworksがリーダーボードに対応していないので、現状では方法がありません。orz