Steam のリッチプレゼンスを出す手順|表示の文・ローカライズ・参加
リッチプレゼンスは、フレンドリストのプレイヤー名の下に、ゲーム内でのプレイヤーの状態を1行で表示する仕組みです。表示する文(リッチプレゼンス文字列)と、一緒にプレイ中のフレンドのグループ化の2つを設定します。
リッチプレゼンスで決める2つのこと
リッチプレゼンスは、プレイ中のゲームについての詳細な表示を、プレイヤーのフレンドリストに出すための仕組みです。ゲームをフレンドリスト内にどのように表示するかを定義する設定は、次の2つです。
- リッチプレゼンス文字列:プレイヤーのフレンドが興味を持つような、ゲーム内でのプレイヤーの状態を表示するために使います。
- フレンドのグループ化:ゲーム内で一緒にプレイ中のフレンドをグループ化するために使います。
どの情報がプレイヤーのフレンドにとって最も興味深いかは、開発側で決めて表示できます。該当する場合に表示するデータの例には、残り時間・経過時間・マップまたはゾーン名・プレイヤーのレベル・ゲームモードのタイプ・サーバー上の空きスポットなどがあります。
ここで出てくる SetRichPresence・ClearRichPresence・GetFriendRichPresence は ISteamFriends にあります。ロビーを使ったマッチメイキングはSteam のロビーとマッチメイキングを作る手順に、ストアページのローカライズはSteam のローカライズ・対応言語の登録にあります。
表示の文を出す
Steam フレンドリストやチャットに表示する文字列を定義するには、SetRichPresence に、表示の文のキーと値を設定します。次のコードの1つ目の引数が、そのキーです。
SteamFriends()->SetRichPresence( "steam_display", "#StatusWithScore" );
表示の文のキーは、Steam クライアントの UI 内でユーザーの選んだ言語で表示される、リッチプレゼンスのローカライズトークンを指名します。表示の文のキーが有効なローカリゼーションタグに設定されていない場合、リッチプレゼンスは Steam クライアントでは表示されません。
たとえば、スコアを表示する場合は値に #StatusWithScore を、スコアを表示しない場合は #StatusWithoutScore を設定します。gamestatus や score のような、文の中の置換に使うキーも、同じ SetRichPresence で設定します。
リッチプレゼンス文字列は1行に収まる必要があり、フレンドリスト内のプレイヤー名の下に表示されます。長過ぎる場合、行末が切り捨てられたり省略(... で表示)されたりします。
ローカライズの文のファイルを作る
リッチプレゼンスのためのローカリゼーションは、各対応言語のトークン名と値のリストです。プレイヤーが実行しているすべてのサポート言語で情報を表示するために、ローカライズが必要です。
トークン名は「#」で始まり、アルファベットや数字、またはアンダースコア(「_」)を含むことができます。トークン値はローカライズされたテキストを含み、文字列内で他のリッチプレゼンス値への置き換えを指定する「置換」を含む場合もあります。
- 最もシンプルなトークンは、ローカライズされたプレーンテキストです。
"#Status_AtMainMenu" "At the Main Menu"の場合、表示の文のキーを#Status_AtMainMenuに設定すると、At the Main Menuがプレイヤー情報とともに Steam クライアントに表示されます。 - 置換は
"#StatusWithScore" "Score: %score%"のように書きます。表示の文のキーを#StatusWithScoreに、scoreを3に設定すると、Score: 3が表示されます。 - 置換は、サブストリングを中括弧で囲むことにより、追加のローカライズをトリガーすることもできます。
"#PlayingHero" "Playing: {#Hero_%hero%}"と"#Hero_Tidehunter" "Tidehunter"の場合、中括弧で区切られた部分文字列の置換が最初に実行され、次に結果のタグがローカライズされます。表示の文のキーに#PlayingHeroを、heroにTidehunterを設定すると、Steam クライアントは#Hero_TidehunterをローカライズしてPlaying: Tidehunterを表示します。
置換に使用されるリッチプレゼンスキーに含めることができるのは、アルファベット、数字、アンダースコア、コロンのみです。
ローカリゼーショントークンが見つからない場合には、システムは英語にフォールバックします。英語が見つからない場合、Steam クライアントではリッチプレゼンスは表示されません。同様に、トークンが未設定のリッチプレゼンスキーを使って置換を指定した場合、Steam クライアントではリッチプレゼンスは表示されません。
ローカライズのファイルを上げる
リッチプレゼンスのローカリゼーションファイルを提供する場所は、「Steamworks設定を編集」ページにある「コミュニティ」タブの「リッチプレゼンス」セクションです。
文字列は、Steam Web サイトで設定された言語にローカライズされます。各言語はファイルで個別にアップロードされ、英語のファイルは次のようになります。
"lang"
{
"english"
{
"tokens"
{
"#StatusWithoutScore" "{#Status_%gamestatus%}"
"#StatusWithScore" "{#Status_%gamestatus%}: %score%"
"#Status_AtMainMenu" "At the main menu"
"#Status_WaitingForMatch" "Waiting for match"
"#Status_Winning" "Winning"
"#Status_Losing" "Losing"
"#Status_Tied" "Tied"
}
}
}
一度のアップロードで複数の言語を追加できます。ファイル内に存在する言語のみが上書きされます。
フレンドをグループにする
新しくなったフレンドリストでは、一緒にプレイ中のフレンドをグループとして表示できます。ゲームカテゴリ内では、パーティ、サーバー、またはマッチで一緒のフレンドが線で結ばれて表示されます。
グループ分けは、ゲームにとって表示する意義のある情報によって異なります。Dota 2 には最大5人のパーティがありますが、ゲームがマッチメイキングした5人全員のチームではなく、一緒にプレイ中のパーティを表示します。カウンターストライクでは、2人のフレンドが1つのサーバーで一緒にプレイ中の場合、パーティの一部としてサーバー全体を表示するのではなく、一緒にプレイ中の共通のフレンドだけを同じ Steam プレイヤーグループに加えます。
Steam フレンドリストやチャットでのプレイヤーのグループ化を定義するには、SetRichPresence に、グループのキーとグループの人数のキーの値を設定します。次のコードの1つ目の引数が、それぞれのキーです。
// 複数のユーザーのパーティーに参加していて、有効なPartyIDがある場合
SteamFriends()->SetRichPresence( "steam_player_group", strPartyID );
SteamFriends()->SetRichPresence( "steam_player_group_size", CNumStr( nPartyMemberCount ) );
// それ以外の場合は、以前の情報を消去します。
SteamFriends()->SetRichPresence( "steam_player_group", nullptr );
SteamFriends()->SetRichPresence( "steam_player_group_size", nullptr );
- グループのキー:設定すると、プレイヤーが特定のグループのメンバーであることを Steam クライアントに対して示します。同じグループ内のプレイヤーは、Steam UI のさまざまな場所で一緒にまとめられる場合があります。この文字列で、パーティー、サーバーまたはゲームにとって都合の良いグループ分けを識別できます。文字列自体はユーザーには表示されません。
- グループの人数のキー:設定すると、グループのキーのグループ内のプレイヤー数合計を示します。すべてのメンバーがユーザーのフレンドリスト内の一部ではない場合に、Steam クライアントはこの数を使ってグループについての追加情報を表示する場合があります(例:「Bob、Pete、その他4人」)。
複数のユーザーのパーティーに参加していて、有効なパーティー ID がある場合は、グループのキーにパーティー ID を、グループの人数のキーにパーティーのメンバー数を設定します。それ以外の場合は、両方に nullptr を設定して以前の情報を消去します。
状態の表示と参加のキー
SetRichPresence は、現在のユーザーのリッチプレゼンスキー/値を設定し、同じゲームをプレイ中のすべてのフレンドに自動で共有します。ゲームの視聴/参加には、2つの特別なキーが使われます。
status:UTF-8 形式の文字列で、Steam フレンドリスト内の「ゲーム情報を表示」ダイアログに表示されます。connect:UTF-8 形式の文字列で、フレンドがどのようにゲームに接続するかのコマンドラインを含みます。Steam フレンドリスト内での右クリックメニューと、プレイヤーの Steam コミュニティプロフィール上の「ゲーム情報を表示」内の「ゲームに参加」ボタンが有効になります。
アプリに ISteamApps::GetLaunchCommandLine が実装されていると、コマンドライン経由でローンチされた際にポップアップ警告が表示されることを無効化できます。ISteamApps::GetLaunchCommandLine は、ゲームが Steam URL 経由で起動された場合にコマンドラインを取得します。
ClearRichPresence は、現在のユーザーのすべてのリッチプレゼンスキー/値をクリアします。フレンドのリッチプレゼンスキーは GetFriendRichPresence で取得でき、指定のキーが設定されていなければ空の文字列("")が返ります。
キーの上限と試し方
SetRichPresence の pchKey は k_cchMaxRichPresenceKeyLength より長くてはならず、pchValue は k_cchMaxRichPresenceValueLength より長くてはなりません。pchValue に空の文字列("")か NULL を設定すると、キーは削除されます。上限の定数は次のとおりです。
k_cchMaxRichPresenceKeys:20。設定可能なリッチプレゼンスキーの最大数で、各ユーザーは最大20のキーを持つことができます。k_cchMaxRichPresenceKeyLength:64。リッチプレゼンスキーで可能な最長の長さです。k_cchMaxRichPresenceValueLength:256。リッチプレゼンス値で可能な最長の長さです。
SetRichPresence が true を返すのは、リッチプレゼンスが正常に設定された場合です。false を返すのは、次の場合です。
pchKeyがk_cchMaxRichPresenceKeyLengthより長いか、長さが 0 の場合。pchValueがk_cchMaxRichPresenceValueLengthより長い場合。- ユーザーが
k_cchMaxRichPresenceKeysで定義されたリッチプレゼンスキーの最大数に達した場合。
データを適切に設定したあと、ゲームを実行し、Web 上で Steam にログインしていることを確認すると、API が機能しているかどうかと、表示される内容をテストのページ(steamcommunity.com/dev/testrichpresence)でテストできます。このページはログインしたユーザー向けにリッチプレゼンス文字列を表示し、未完成または正しくないデータに対してはエラー情報が表示されます。
情報源
- Steamworks — リッチプレゼンスの強化(リッチプレゼンス文字列・フレンドのグループ化・Steam API とローカリゼーション・コードスニペット)https://partner.steamgames.com/doc/features/enhancedrichpresence?l=japanese確認日 2026-10-21
- Steamworks — ISteamFriends インターフェイス(SetRichPresence・ClearRichPresence・GetFriendRichPresence・上限の定数・リッチプレゼンスローカリゼーション)https://partner.steamgames.com/doc/api/ISteamFriends?l=japanese確認日 2026-10-21
- Steamworks — ISteamApps インターフェイス(GetLaunchCommandLine)https://partner.steamgames.com/doc/api/ISteamApps?l=japanese確認日 2026-10-21