無所属

ホーム ドキュメントとヘルプ
API overview

これ以上のリンクや情報を利用するには、こちらからサインアップしてアカウントにログインしてください
 Steamworks は、あなたのゲームに様々な機能とソリューションを提供します。次の概要では、主要な機能およびその実装方法を解説します。より詳細な情報については、Steamworks にサインアップし、こちらのサイトにログインすればご覧いただけます。

データ&実績

header:ISteamUserStats.h

Steam のSteam データ API および実績 API を利用すれば、ゲームのユーザーに関する永続的な実績と使用状況を簡単に把握することができます。

詳細については、Steamのデータおよび実績についてのドキュメント ページをご覧ください。


ユーザー認証&所有権

header: steam_gameserver.h, ISteamGameServer.h, ISteamUser.h

Steamworks にはゲーム クライアント、ゲーム サーバー、そしてウェブサイト間での Steam ユーザーの認証の様々な方法が用意されています。

ユーザー認証&所有権についてはドキュメント ページをご覧ください。


マッチメーキング

header:ISteamMatchmaking.h, ISteamGameServer.h, ISteamMasterServerUpdater.h

ユーザーは、マッチメーキングでサーバーリストから既存のゲームを検索したり、あるいはロビーを介してグループと一緒に新しいゲームを始めたりすることができます。ロビーを利用したマッチメーキングの詳細については、ピア ツー ピア マッチメーキングをご覧ください。

マッチメーキングにはゲーム サーバー コンポーネントとゲーム クライアント コンポーネントの 2 つがあります。ゲーム サーバー(専用サーバー、または他のユーザーの接続を受け入れるクライアント)は、その情報を Steam サーバー(マスター サーバー)に公開することができます。ゲーム サーバーは、サーバー名、プレイヤー数、マップ/シナリオ名、IP アドレスなどといった様々な詳細情報を共有することができます。これについては、ISteamMasterServerUpdater インターフェースに詳しく記述されています。次に、ゲーム クライアントは ISteamMasterServerUpdater インターフェースを利用して、これらのゲーム サーバーやその詳細の生リストを取得します。このインターフェースは、SteamMatchmakingServers()->Request*() 関数の 1 つを介して、必要なソースのベース リストをマスター サーバーにリクエストします。

取得可能なサーバー セットは複数存在します。
  • Internet server list - パブリック インターネット上でホストされ、アクセス可能なゲーム サーバー
  • LAN server list - UDP ブロードキャスト経由でローカルのクラス C ネットワーク上に見つかるゲーム サーバー
  • Friends server list - フレンドが現在プレイ中のゲーム サーバー
  • Favorites server list - 現在のユーザーがお気に入り登録をしたゲーム サーバー
  • History server list - 現在のユーザーが最近プレイしたゲーム サーバー
  • Spectator server list - 「観覧」モードという特殊なマーク付けがされたゲーム サーバー。実際には、これらはリレー経由でユーザーに別のマルチプレイヤー ゲームの観覧を許可するプロキシ サーバー。
これらの関数が返すゲーム サーバーのリストは、場合によって巨大なものになることもあります。リストの受け取り時に、ゲーム クライアントはコールバックを受け取ります。初めに返される結果は、クエリー用の IP アドレスの単純なリストです。それらのIP アドレスは、リクエストをしているクライアントに近いゲーム サーバーから先に返ってきます。

その後、クライアントはサーバーの詳細情報と Ping 時間をそれぞれのゲーム サーバーにリクエストすることができます。サーバーからの情報のクエリーには時間がかかる場合(通常は毎秒 50~100 サーバーに問合せ可)もあるため、多くのゲームは届いた情報から順に表示を開始します。

Steam クライアントに内蔵されたサーバー ブラウザーは、ゲーム サーバーについての基本情報を表示し、ゲームに参加するかどうかのオプションをユーザーに提示します。ただし、このブラウザーが表示できる情報量は限られるため、ゲームへの招待方法としては二次的なものと考え、ゲーム内のサーバー ブラウザーを優先的に使用することをお勧めします。

注意:
  • ユーザーが、Steam クライアントのサーバー ブラウザー経由で、またはフレンド リストからゲームに参加する場合、Steam は次のパラメーターでゲームを起動します(+connect <ip:port>)。
  • ゲーム サーバーが要パスワードとフラグ付けされている場合、+password <password> もコマンド ラインに表示されます。
  • ゲームがすでに実行中の場合、必要に応じて、Steam は代わりに IP アドレスとポートを含むコールバック シグナル、GameServerChangeRequested_t をゲームに送信します。


コミュニティ

header:ISteamFriends.h, ISteamUtils.h

Steam コミュニティ API は、システム内の他のプレイヤーの詳細情報にアクセスするための関数セットです。照会可能なユーザー データは複数あります。
  • SteamID - システム上でのユーザー固有の識別子
  • Persona name - ユーザーのニックネーム/表示名/プレイヤーの名前
  • Persona state - オフラインまたはオンライン
  • Avatar - ユーザーに関連付けられた画像
  • Game info - ユーザーが起動しているゲームと接続中のゲーム サーバー(該当する場合のみ)
  • Clan memberships - ユーザーが属しているグループ
この API はローカル ユーザーが接触した他のユーザーの情報だけを保有しています。ユーザーは、すべてのフレンド、ロビーをシェアしているユーザー、またグループの中にいるユーザーの状態を常に知ることになります。さらに、ゲーム サーバーが Steam に接続し、マルチプレイヤー認証 API を使用している場合、ユーザーはゲーム サーバー上の他のユーザーの情報も保有することとなります。それらの各エンティティー(ユーザー、ゲーム サーバー、ロビー、クラン)は、すべて SteamID で照会します。これがどのようなエンティティーであるかについては、CSteamID::GetAccountType() を呼び出すことにより識別することができます。

これらの様々なグループ内のユーザーを反復処理するには、SteamFriends()->GetFriendCountFromSource() / SteamFriends()->GetFriendFromSourceByIndex() という関数を使用します。ここでの「source」とは、メンバーリストを取得するゲーム サーバー、ロビー、またはクランの SteamID を指します。たとえば、ロビー内の他のすべてのユーザーを反復処理する場合は以下のような形で行います。

CSteamID steamIDLobby = steamIDLobbyWeHaveGottenPreviously;
int cLobbyMembers = SteamFriends()->GetFriendCountFromSource( steamIDLobby );
for ( int i = 0; i < cLobbyMembers; i++ )
{
  CSteamID steamIDLobbyMember = SteamFriends()->GetFriendFromSourceByIndex( steamIDLobby, i );
  const char *pchName = SteamFriends()->GetPersonaName( steamIDLobbyMember );
  ...
}

ゲーム サーバー上のユーザーすべて、またはクラン メンバーを見つける場合にも、同じメソッドを使うことができます。

ローカル ユーザーのフレンドを反復処理するには GetFriendCount() GetFriendByIndex() を使用します。他のユーザーがフレンド(たとえば、スコアボード内にいるフレンド)であるかどうかについては、SteamFriends()->HasFriend() を使用すれば簡単に確認できます。これら 3 つの関数は、いずれも ISteamFriends.h の最上部で enum (列挙型)で定義されたフレンド フラグセットを使い、取得するユーザー セットを制御することができます。

Persona name はすべて UTF-8 形式で返されます。内部文字コードにワイド文字(UFT-16)を使用する場合は、変換時に MultiByteToWideChar() にコード ページとして CP_UTF8 を指定してください。

ユーザーのアバターは固有の texture ID の int 型で返されます。関数 SteamUtils()->GetImageSize() / SteamUtils()->GetImageRGBA() がこの texture ID を読み取り、テクスチャー データを RGBA ストリームで返します。

コミュニティ API で最も頻繁に送信されるコールバックは PersonaStateChanged_t です。これは、既存のユーザー、または新規のユーザーに関する新しい情報を受け取るときに必ずトリガーされます。最も一般的なのは、ローカル ユーザーのフレンドが名前、アバター、またはオンライン状況を変更する場合です。しかし、フレンドがロビーやゲーム サーバーに参加するケースでは処理が複雑化します。そのような場合には以下のシーケンスが発生します。
  • ローカル ユーザーがロビーに参加
  • ローカル ユーザーが他のロビー メンバーの SteamID リストを受け取ります
  • 最初、そのローカル ユーザーは他のユーザーについて何も知らないため、サーバーに彼らの情報を照会する必要があります
  • ローカル ユーザーがその情報(大抵最初は名前)を受け取ると、名前を変更したことを示すフラグの付いた PersonaStateChanged_t がゲームに送信されます
  • この時点でアバター情報もダウンロードされます。アバター情報はサイズが大きく、ダウンロードには数秒かかる場合があります。完了すると、アバターが変更されたことを示す別の PersonaStateChanged_t コールバックが送信されます。
ユーザーが自分の名前またはアバターを変更する可能性は常時あるため、UI はこれらのアップデート処理を行う必要があります。一般的なパターンは、ユーザー情報を表示する各 UI ウィジェットが PersonaStateChanged_t コールバックを登録し、変更があればアップデートする形です。

コミュニティには直接関係ありませんが、その他の便利な関数をいくつかここで紹介しておきます。

ゲームにプッシュ・ツー・トーク音声機能が搭載されている場合、プッシュ・ツー・トーク キーが押されたり、キーから指が離れたりしたときには、必ず SteamFriends()->SetInGameVoiceSpeaking() を呼び出してください。そうすることで、フレンドのシステムを経由して行われる音声チャットをすべて抑制するよう Steam クライアントに指示し、ユーザーが音声メッセージを 2 つのソースに送ってしまう事態を避けることができます。

Steam オーバーレイ内のダイアログをゲームに有効化させる場合は、SteamFriends()->ActivateGameOverlay() 関数を使用します。ダイアログを開くには名前が必要です。名前が指定されていない場合には、オーバーレイの有効化のみが行われます。詳細については ISteamFriends.h をご覧ください。


ピアツーピア ネットワーキング

header:ISteamNetworking.h

Steam ネットワーク API は、ゲームが 2 人の Steam ユーザー間でデータを送受信できるようにするシンプルな関数セットです。家庭の NAT 越しに接続するためには、libjingle の NAT ホールパンチング ライブラリを使用するか、または直接接続できない場合は Steam リレー サーバー経由で接続してください。
詳細については、Steam のピアツーピア ネットワーキングをご覧ください。

Steam クラウド

header:ISteamRemoteStorage.h

Steam クラウド API を使うことにより、ゲーム(そしてプレイヤー)は異なるコンピューター間でも同じファイル ストレージにアクセスできるようになります。ゲームの設定、セーブデータ、その他のユーザー固有の情報が Steam クラウドにコピーされます。これにより、プレイヤーは煩わしい作業なしに、いつでもゲームのプレイを続けることができます。

Steam クラウドは、API を利用して、該当するファイルの読み取りと書き込みを行うだけで使用することができます。
詳細については、Steam クラウドのリモート ファイル ストレージについてのドキュメント ページを参照してください。

Valve Anti-Cheat(チート検出機能)

マルチプレイヤー認証ヘッダーをご覧ください(steam_gameserver.h, ISteamGameServer.h, ISteamUser.h)

VAC Steamworks C++ API との統合は簡単な作業で実行できます。面倒な部分は Steam が処理します。VAC の利点は、ゲーム クライアントが直接チートの検出を行わない点です。あなたのゲームは、特定のユーザーが VAC により Ban されていないかを、この API で確認するのみです。

VAC は Steamworks と Steam クライアントのコンポーネントの 1 つで、ゲームの実行中にチートが行われていないかどうか、ユーザーのシステムをスキャンします。VAC はウイルス スキャンとよく似た形で動作します。またこれは既知のチートを検知するデータベースを持っています。

ボイス


Steamworks は、ゲーム内音声チャット統合ソリューションを提供します。これには、NAT デバイス間でピア同士を直接接続するテクノロジーも含まれます。これは、プレイヤー間でのコミュニケーションのための信頼できるフレームワークを提供します。

さらに Steam コミュニティは、プレイヤーがどのゲームをプレイしていても常時利用可能な音声チャット機能も提供します。

DRM


Steamworks Digital Rights Management は、ゲームのコンパイル済み実行ファイルをラップし、Steam が認証したインスタンスの下で動作しているかをチェックします。この DRM ソリューションは Half-Life 2 や Counter-Strike:Source 等のゲームの保護に使われているのと同じものです。Steamworks DRM は、実際のゲームでその信頼性が検証されています。また、顧客がストレスを感じることなく使用できるものでもあります。

DRM ソリューションに加え、Steamworks は世界中の店舗に暗号化されたメディアを送付し、同日発売することでゲームを保護します。ゲームはリリースの瞬間まで暗号化されています。したがってゲームの内容が製造段階で外部に漏れることは決してありません。この保護措置は、完成データ、またはゴールド マスターを弊社に提出するだけで講じることができます。

 

Valve Confidential

このアクセス制限されたページには Valve の機密情報が含まれています。このページへのアクセスあるいは使用には、Valveと機密情報を対象とした機密保持契約およびまたはライセンス契約を結ぶ必要があります。