今回はUnityでのゲーム開発に関する話題で、タイトルの通り
自作ゲームにSteamの実績機能を導入する方法
を丁寧にご紹介するという内容になっております。
Unityでゲーム開発をしている方の中にはSteamで自作ゲームをリリースするよという方も多いかと思います。その際にぜひゲームに導入しておきたい機能がSteamが提供している実績機能です。
Steamの実績機能を自作ゲームに導入することは実はそれほど難しくないのですが
- UnityにはSteamと連携する機能が公式で用意されていない
- Steam側の設定も必要で若干分かりづらい
といった点があるので、私の場合は初めてSteamでリリースしたときは導入方法がよく分からず、そのときのゲームには残念ながら実績を導入できませんでした。しかしいま開発中のゲームでは無事に実績を導入することに成功したので、ここでは他の方の参考になるようにUnity製ゲームにSteamの実績機能を導入するまでの手順を丁寧に書いていきますね。
前提:Steamにゲーム情報を登録しておく必要あり
まずはじめに、実績機能導入の話はSteamに予めゲーム情報を登録してあることが前提となります。
Steamにゲーム情報を登録するためにはSteamworksという開発者用サイトに登録したり、Steamにゲームの登録料を支払ったりしておく必要があるので注意してください。その辺については下記の記事にかなり詳しくまとめておきましたので、まだSteamworksに登録していないよという方はそちらの方を先にご覧いただければと思います。
UnityでSteamの実績機能を導入するまでの手順まとめ
ではここからが本題でUnityでSteamの実績機能を導入するまでの手順を詳しくご紹介していきます。大まかに言うと次のような手順があります。
- Steamworks側の設定を行い、必要な実績を作る
- 「Steamworks Foundation」を使ってゲーム側の設定を行う
それぞれ詳しく見ていきましょう。
Steamworks側の設定
まずはSteamworksに登録したゲームのページから実績作りに必要な設定を行います。ここでは次の作業を行います。
- (必要な場合)実績用データを設定する
- 実績を作る
(必要な場合のみ)実績用のデータを設定する
実績の設定を行う前に、もし例えば
「モンスターを○○体倒す」「レベル○○に到達する」
といった実績を作る場合は進捗を保存できるデータをSteam側に作っておく必要があります。Steamworksの「データ&実績」→「データ設定」から新しいデータを作成しましょう。
実績を作る
次に実績本体の設定を行います。実績本体には解除条件や表示名・アイコンなどを設定する必要があります(ただしゲーム側で条件を判定する場合は解除条件はなくても構いません)。
実績の詳しい設定方法は下記のとおりです。
- API名:
ゲーム側で実績を操作する際に使う名称。半角英数で記入しましょう。 - 進行状況:
実績解除までの進行状況を保存するためのデータ(先ほどの手順で作ったもの)を選択します。データが必要ない場合は「なし」でOK。 - ディスプレイ名・説明:
実際にユーザーさんに表示する実績名や説明です。ここのテキストはローカライズすることが可能なので、ゲームの対応言語に合わせて翻訳を用意しておくとよいでしょう。 - 設定:
特に理由がなければ「Client」にしておきます。 - 非表示?:
チェックを入れると秘密の実績になります。 - 達成アイコン:
実績を解除したときのアイコンを登録します。カラー画像が推奨されています。 - 未達成アイコン:
実績が未解除のときのアイコンを登録します。モノクロ画像が推奨されています。
アイコンは256pxのものを登録しましょう。ただし実際の表示サイズは64px程度なので縮小しても潰れにくい、はっきりした画像が望ましいです。
ゲーム側の設定
さてここからゲーム側の設定です。個人的にはこの作業がよくわからなかったのですが、Heathen Engineeringというところが出している無料アセット「Steamworks Foundation」を使ったところ比較的簡単に設定できたのでここではその方法について書いていきます。
主な手順は次のとおり。
- Steamworks Foundationをインポートする
- SteamSettingsを作る
- APIの初期化処理を呼び出せるようにする
- Steamworksから実績をインポートする
- 実績の解除処理を作る
Steamworks Foundationのインポート
まずはSteamworks Foundationをプロジェクトにインポートします。公式ページのインストール手順に従い、パッケージマネージャからインストールを行うと楽です。
インポートすると関連するアセット(Steamworks.NET等)を一緒にインストールするか聞かれるので、まだ導入していない場合はガイドに従って導入しておきましょう。
SteamSettingsの作成
次に適当なフォルダを右クリック→「Steamworks」→「Settings」を選択してSteamSettingsファイルを作成します。
このファイルのAppID欄に自分のゲームのID(Steamworksのページで確認できます)を記入し、Unityを再起動します。デフォルトで入っているIDはサンプルゲームのIDなのでそのままでは使えない点に注意してください。
APIの初期化
そうしたら次はSteamworks APIの初期化処理をゲームに導入する必要があります(初期化処理を入れないと実績等が上手く動作しないようです)。初期化の方法は全部で3種類あるのですが、個人的には先ほどのSteamSettingsファイルを使って初期化する方法が一番いいと思います。
詳しいやり方は公式ドキュメントにあります。端的に言うとゲーム開始時にSteamSettingsのInitialize関数を呼び出すだけです。
Steamworksで作った実績のインポート
実績データをゲーム側にインポートするには、ゲームを実行した状態でSteam Settingsファイルの「Artifacts」→「Achievements」→「Import」を押すだけです。
すると実績データのファイルが自動的に作成されます。
実績の解除処理の作成
ここまでできたらあとは実績の解除処理を実装するだけです。実績を解除するには当該の実績のUnlock関数を呼べばOKです。例えば下記のようなC#スクリプトを用意すれば実績を解除することができるようになります。
[SerializeField]
AchievementObject achievement;
public void UnlockAchievement(bool isStore)
{
if (!achievement.IsAchieved)
{
achievement.Unlock();
if (isStore)
{
achievement.Store();
}
}
}
ただしUnlock関数を呼んだだけでは解除した実績がSteamに反映されません。適当なタイミングでStore関数を呼ぶ必要がある点に注意してください。Store関数を呼び出せばおなじみの実績解除のポップアップが出ます。
おわりに
以上、Unity製ゲームにSteamの実績機能を導入する方法について解説しました。
ゲームがSteamの実績機能に対応しているとプレイヤーさんのモチベーションが大きくアップすると思うので、Steamで自作ゲームをリリースするなら最低限実績機能には対応しておきたいものです。ぜひ上記の内容を参考にしていただき、実績の導入にチャレンジして頂ければと思います。
この記事がゲーム開発の参考になれば幸いです。