--- title: "Steam連携" slug: "game-gamepot3-steamworks-integration" updated: 2026-09-17T09:23:32Z published: 2026-09-17T09:23:32Z canonical: "guide.ncloud-docs.com/game-gamepot3-steamworks-integration" --- > ## Documentation Index > Fetch the complete documentation index at: https://guide.ncloud-docs.com/llms.txt > Use this file to discover all available pages before exploring further. # Steam連携 Classic/VPC環境で利用できます。 ゲームでの、プレイヤーの Steamアカウントを利用した認証設定を次のシナリオで説明します。 - Steamアカウントでログインを設定 - 既存のユーザーでログインまたは新規ユーザーを作成 - 匿名ログインから Steamアカウント経由のプラットフォームログインにユーザーを更新 ゲーム内のプレイヤーに Steamログインオプションを提供するために、Steamworksパートナーポータルからアプリを作成します。続けてユーザーをログインさせてセッションチケットを取得するために、[Steamworks.Net SDK](https://github.com/rlabrecque/Steamworks.NET/releases)をインストールします。 ## Steamアカウントログインの設定 1. Steamworksの文書に従ってアプリを作成し、アプリ IDを記録します。[Steamworks documentation.](https://partner.steamgames.com/doc/store/application#creating_applications) 2. ウェブ APIキー文書を使った認証に応じて公開者のウェブ APIキーを作成します。[Authentication using Web API Keys](https://partner.steamgames.com/doc/webapi_overview/auth) 3. Unity用 SDKをインストールする具体的な指示に従って[SteamWorks.Net SDK](https://github.com/rlabrecque/Steamworks.NET/releases)をインストールします。 1. SteamWorks.Net SDK Unity pluginを Importします。 2. プロジェクトのルートにある steam_appid.txtを開き、480を自分のアプリ IDに置き換えます。 3. シーン内のゲームオブジェクトに Steamマネージャゲームコンポーネントを追加します。これで Steamライブラリがリセットされます。 4. テストする前に、Steamがインストールされ、ログインしているか、開発中のプロジェクトライブラリにあるか確認します。 ## Steamログイン 1. [Steamworks.NET](https://github.com/rlabrecque/Steamworks.NET/releases)から最新バージョンをダウンロードし、Unity Importを行います。 ![console_steam01](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/console_steam01.avif?sv=2026-02-06&spr=https&st=2026-10-26T13%3A33%3A28Z&se=2026-10-26T14%3A33%3A28Z&sr=c&sp=r&sig=A%2BdaC3cDl73fOMThfjIlhHJ7b0y3jDwlRE1bs63uVY8%3D) 2. プロジェクトのルートフォルダに steam_appid.txtファイルを作成した後、Steamから発行された app IDを入れて保存します。 ![console_steam02](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/console_steam02.avif?sv=2026-02-06&spr=https&st=2026-10-26T13%3A33%3A28Z&se=2026-10-26T14%3A33%3A28Z&sr=c&sp=r&sig=A%2BdaC3cDl73fOMThfjIlhHJ7b0y3jDwlRE1bs63uVY8%3D) 3. **Users & Permissions** > **Manage Group** > **Create Group** > Create Web API KEYを作成します。 ![console_steam03](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/console_steam03.avif?sv=2026-02-06&spr=https&st=2026-10-26T13%3A33%3A28Z&se=2026-10-26T14%3A33%3A28Z&sr=c&sp=r&sig=A%2BdaC3cDl73fOMThfjIlhHJ7b0y3jDwlRE1bs63uVY8%3D) 4. Steam APP IDと Web APIキーを GAMEPOTダッシュボード > **連携** > **Steam**に追加します。 ![console_steam04](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/console_steam04.avif?sv=2026-02-06&spr=https&st=2026-10-26T13%3A33%3A28Z&se=2026-10-26T14%3A33%3A28Z&sr=c&sp=r&sig=A%2BdaC3cDl73fOMThfjIlhHJ7b0y3jDwlRE1bs63uVY8%3D) ### SteamManagerシーンを追加し、そのシーンに追加 **Assets > Scripts > Steamworks.NET > SteamManager.cs**を、Hierarchyの空のオブジェクトを作成して追加します。 ![console_steam05](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/console_steam05.avif?sv=2026-02-06&spr=https&st=2026-10-26T13%3A33%3A28Z&se=2026-10-26T14%3A33%3A28Z&sr=c&sp=r&sig=A%2BdaC3cDl73fOMThfjIlhHJ7b0y3jDwlRE1bs63uVY8%3D) ### GAMEPOTログインに追加 Steamログインを完了した後、Steamセッションチケットを signInWithCredentialでログイン処理してください。 ``` NBaseSDK.NBase.signInWithToken("steam", memberId, sessionTicket, (user, error) => { try { if(error != null) { Debug.Log("Login Success - " + user.ToString()); } memberId = user.Id; } catch (Exception ex) { Debug.Log($"An exception occurred during sign-in: {ex.Message}"); } }); ``` ### ゲームにコードを追加するサンプルコード ``` private Callback m_GetAuthSessionTicketResponse; private byte[] m_Ticket; private uint m_pcbTicket; private HAuthTicket m_HAuthTicket; // NBase Initializeの完了後に実行してください。 private void Initialize() { try { InitializeSteamAuth(); // Steamがリセットされたか確認 if (SteamManager.Initialized) { // Steamログイン状態を確認 if (SteamUser.BLoggedOn()) { // ログイン済みの場合 CSteamID steamId = SteamUser.GetSteamID(); string steamName = SteamFriends.GetPersonaName(); Log($"Steam User Connected - Name: {steamName}, SteamID: {steamId}"); } else { // ログインしていない場合 Log("Steam user not logged in. Opening Steam login overlay."); ShowBox("Steam must be running to play this game."); } } else { Log("Steam is not initialized. Please make sure Steam is running."); ShowBox("Steam must be running to play this game.\nPlease start Steam and restart the game."); } } catch (Exception ex) { Log($"Failed to initialize Steam login: {ex.Message}"); ShowBox("Failed to connect to Steam. Please restart the game."); } } private void OnDestroy() { CleanupAuthTicket(); } private void InitializeSteamAuth() { if (!SteamManager.Initialized) { Log("Steam is not initialized. Skipping auth ticket generation."); return; } try { // Create callback for auth ticket response m_GetAuthSessionTicketResponse = Callback.Create(OnGetAuthSessionTicketResponse); // Initialize ticket buffer m_Ticket = new byte[1024]; // Create SteamNetworkingIdentity instance SteamNetworkingIdentity networkingIdentity = new SteamNetworkingIdentity(); // Get auth session ticket with networking identity m_HAuthTicket = SteamUser.GetAuthSessionTicket( m_Ticket, 1024, out m_pcbTicket, ref networkingIdentity ); if (m_HAuthTicket == HAuthTicket.Invalid) { throw new Exception("Failed to get valid Steam auth ticket"); } Log($"Successfully generated Steam auth ticket. Ticket size: {m_pcbTicket} bytes"); } catch (Exception ex) { Log($"Error during Steam auth ticket generation: {ex.Message}"); CleanupAuthTicket(); } } private void OnGetAuthSessionTicketResponse(GetAuthSessionTicketResponse_t pCallback) { try { if (pCallback.m_hAuthTicket != m_HAuthTicket) { Log("Received response for different auth ticket"); return; } // Resize to buffer of actual ticket size System.Array.Resize(ref m_Ticket, (int)m_pcbTicket); // Format as Hex System.Text.StringBuilder sb = new System.Text.StringBuilder(); foreach (byte b in m_Ticket) { sb.AppendFormat("{0:x2}", b); } CSteamID steamId = SteamUser.GetSteamID(); sessionTicket = sb.ToString(); NBaseSDK.NBase.signInWithToken("steam", steamId.ToString(), sessionTicket, (user, error) => { try { if(error != null) { Debug.Log("Login Success - " + user.ToString()); } memberId = user.Id; } catch (Exception ex) { Debug.Log($"An exception occurred during sign-in: {ex.Message}"); } }); switch (pCallback.m_eResult) { case EResult.k_EResultOK: Log("Steam auth ticket successfully generated"); break; case EResult.k_EResultInvalidParam: Log("Steam auth ticket generation failed: Invalid parameters"); break; case EResult.k_EResultLimitExceeded: Log("Steam auth ticket generation failed: Limit exceeded"); break; default: Log($"Steam auth ticket generation failed: {pCallback.m_eResult}"); break; } } catch (Exception ex) { Log($"Error processing auth ticket response: {ex.Message}"); } } private void CleanupAuthTicket() { if (m_HAuthTicket != HAuthTicket.Invalid) { try { SteamUser.CancelAuthTicket(m_HAuthTicket); m_HAuthTicket = HAuthTicket.Invalid; m_Ticket = null; Log("Steam auth ticket cleaned up successfully"); } catch (Exception ex) { Log($"Error cleaning up auth ticket: {ex.Message}"); } } } ``` ### 自動ログイン処理のサンプルコード 自動ログイン処理するために、まずログインしているかどうかを確認するサンプルコードです。 ``` NBaseSDK.NBase.signInLastLoggedIn((user, error) => { if (error != null) { // 自動ログインができない場合、一般ログインとして処理 NBaseSDK.NBase.signInWithToken("steam", steamId.ToString(), sessionTicket, (user, error) => { try { if(error != null) { Debug.Log("Login Success - " + user.ToString()); } } catch (Exception ex) { Debug.Log($"An exception occurred during sign-in: {ex.Message}"); } }); } else if(user != null) { // 自動ログイン成功 Debug.Log("Login Success - " + user.ToString()); } } ```