Steamの実績を実装する

Steamの実績を実装するにはSteamSDKを使う必要があります。ただ、これはC++で書かれているのでUnityで使うにはC#から呼び出せるようにする必要があります。そしてUnityでは公式でSteamSDKをサポートしていません。アセットはありますが。

で、各ゲームエンジンごと対応されたSteamSDKを公開しているサイトが公式から紹介されてます。

僕はその中からSteamworks.NETを使いました。前述したアセットもこれをラップしているみたいです。

.unitypackageにしてあるのでインポートは楽ですが、実績で使うときに色々詰まったのでMEMOっておきます。

ちなみにUnrealEngineは公式でサポートしているっぽい。良いなー。


参考にさせてもらったサイトです。


インポートする

Steamworks.NET_.unitypackageSteamManager.csファイルをインポートする。

サイトから最新バージョンのunitypackageをダウンロードしてインポートします。

それとExampleからSteamManager.csファイルもダウンロードします。Assets以下に色んなファイルがありますが、とりあえずSteamManager.csファイルだけは必要です。ここを開いて「ctrl」+「s」で保存してもよし。

使用例なので、暇があれば他のファイルも見てみると参考になります。

Steam側の設定をする

SteamWorks➡アプリ管理➡目的のアプリから「データ実績」タブ。

「新しい実績」を押して項目を設定していきます。

API名

SDKから呼び出す時に使う文字列。

ディスプレイ名と説明

解除したときにプレイヤーに表示される文字列。

設定

実績がどこから解除されるかということらしいです。基本はClient。ゲームサーバから更新されるときはGSを選ぶということだそうで。

非表示

隠す。多分ストアのページとかコミュニティとかから表示されなくなるっていういことだと思います。僕は未使用ですごめんなさい。

達成アイコンと未達成アイコン

達成したときのアイコンと未達成時のアイコンです。ファイルを選択してアップロードボタンを押します。


設定したら実績欄右側にある「保存」を押します。

さらに「公開」タブからも公開して有効にすることを忘れずに。

Unity側

Steamのクライアントが起動してないと使えません。

まず[steam_appid.txt]をコピーしてプロジェクトのルートフォルダ直下に置きます。

Assets/直下ではないです。Assetsと同じ階層に置きます。コピーして使います。あとredist以下に元から存在しているsteam_appid.txtはそのままで良いです。僕は最初こっちを変更しててなんか実績取得できないなーとか小一時間はまりました。

置いたらファイルの内容をSteamのアプリIDだけに変えます。僕のだとこんな感じ。


ちなみに元から設定してある480というSteamアプリIDはSteamが公開しているテスト用? のゲームのIDみたいです。実績も取得できます。


そしてシーン内にSteamManager.csコンポーネントを持ったオブジェクトを置けばSteamAPIを呼び出せるようになります。SteamManagerはDontDestroyになるようにしてあるので、シーンが変わっても破棄されません。


APIを呼び出すスクリプトを自分で実装する必要があります。

とりあえず実績を取得するだけしか使ってないんですが。


SteamAPIを呼ぶ前に

if(SteamManager.Initialized){
     //実績処理
}

のようにSteamManager.Initializedを呼び出して初期化します。正しく初期化されれば、trueを返します。APIを呼ぶときは初期化されているかIF文を使った方が良さげです。

実績を取得させる場合は

SteamUserStats.SetAchivement(実績API名);

でセットできます。


ちゃんとSteam側で実績を設定出来ているか確認するときは

SteamUserStats.GetAchievementName(実績のID番号);

で実績名を取得できるか確認してみれば良いかと。

コメント

タイトルとURLをコピーしました