設定 Unity 專用 Google Play 遊戲外掛程式並登入

本文將逐步說明如何設定 Unity 專案,以便使用 Unity 專用 Google Play 遊戲外掛程式。您將瞭解如何安裝外掛程式及設定 Unity 專案。這份文件也說明如何驗證登入服務。

事前準備

查看軟體需求。 設定 Play 管理中心並安裝 Unity Hub。

安裝外掛程式

如要下載及安裝 Unity 適用的 Google Play 遊戲外掛程式,請在 Unity Hub 中按照下列步驟操作:

  1. 下載 GitHub 存放區

  2. current-build 目錄中,找出 unitypackage 檔案。這個檔案代表外掛程式。例如,檔案應如下所示:

      current-build/GooglePlayGamesPluginForUnity-X.YY.ZZ.unitypackage
    

設定 Unity 專案

如要在播放器設定中設定 Unity 專案,請按照下列步驟操作:

  1. 開啟遊戲專案。

  2. 在 Unity Hub 中,依序點選「Assets」>「Import Package」>「Custom Package」,將 unitypackage 檔案匯入專案的資產。

  3. 確認目前的建構平台已設為「Android」

    1. 依序點選主選單的「File」>「Build Settings」

    2. 選取「Android」,然後點選「Switch Platform」

    3. 依序前往「Window」>「Google Play Games」,應該會顯示新的選單項目。如果沒有顯示,請依序點選「Assets」>「Refresh」重新整理資產,再嘗試重新設定建構平台。

  4. 在 Unity Hub 中,依序點選「File」>「Build Settings」>「Player Settings」>「Other Settings」

  5. 在「目標 API 級別」方塊中選取版本。

  6. 在「Scripting backend」(指令碼後端) 方塊中輸入 IL2CPP

  7. 在「目標架構」方塊中選取值。

  8. 請記下套件名稱 package_name,您稍後會用到這項資訊。

Unity 專案中的玩家設定
Unity 專案中的播放器設定。

建立新的金鑰儲存區

如要驗證憑證,您需要金鑰。 請按照下列步驟操作:

  1. 在 Unity Hub 中,依序點選「File」>「Build settings」>「Player settings」
  2. 在「發布設定」部分,按一下「金鑰儲存庫管理工具」
    1. 在「金鑰儲存庫管理工具」視窗中,依序點選「金鑰」>「建立新金鑰」>「任何位置」
    2. 選取資料夾,然後為金鑰儲存區命名。
    3. 在「密碼」方塊中輸入密碼並確認。
    4. 按一下「新增金鑰」

請記下資料夾名稱,您可以使用這個名稱在 Google Cloud 中建立憑證

從 Play 管理中心複製 Android 資源

您在 Play 管理中心建立的所有成就、排行榜及事件都會內含您在設定 Unity 專案時使用的 Android 資源。

如要取得遊戲的 Android 資源,請按照下列步驟操作:

  1. Google Play 管理中心開啟遊戲。

  2. 在「Play 遊戲服務 - 設定」頁面 (依序點選「拓展」>「Play 遊戲服務」>「設定與管理」>「設定」),按一下「取得資源」

  3. 在「Resources」視窗中,按一下「Android(XML)」分頁標籤。

  4. 選取並複製 Android 資源 (AndroidManifest.xml) 內容。

將 Android 資源加入 Unity 專案中

將下列 Android 資源加入 Unity 專案中:

  1. 在 Unity Hub 中,依序點選「Window」>「Google Play Games」>「Setup」>「Android Setup」

    • 在「Directory to save constants」(儲存常數的目錄) 欄位中,輸入常數檔案的資料夾名稱。
    • 在「Constants class name」(常數類別名稱) 欄位中,輸入要建立的 C# 類別名稱,包括命名空間。

      舉例來說,如果 C# 類別是 id.cs,且位於「Assets > myproject > scripts > id.cs」底下。常數類別名稱可以是 myproject.scripts.id

    • 在「資源定義」欄位中,貼上從 Google Play 管理中心複製的 Android 資源資料 (AndroidManifest.xml 檔案)。

    • 選用:在「用戶端 ID」欄位中,輸入已連結網頁應用程式的用戶端 ID。

      如要從 Google Cloud 取得遊戲的用戶端 ID,請參閱「建立用戶端 ID」一文。

      只有兩種情況需要使用這類 ID:一種情況是遊戲使用網頁式後端伺服器,而且需由後端伺服器使用伺服器授權碼交換存取權杖,另一種情況是您需要使用玩家的 ID 權杖,發出其他非遊戲的 API 呼叫。

    • 點選「Setup」。這樣做會使用用戶端 ID 設定遊戲,並產生含有各 Android 資源所用常數的 C# 類別。

  2. 在 Unity Hub 中,依序點選「Window」>「Google Play Games」>「Setup」>「Nearby Connections Setup」

    • 在「Nearby connection service ID」(Nearby 連線服務 ID) 欄位中,輸入 package_name

      使用您在設定 Unity 專案時使用的 package_name

    • 按一下 [設定]。

選擇社群平台

Google Play 遊戲服務外掛程式會實作 Unity 的社群介面,這樣才能在整合其他平台時,與已經使用該介面的遊戲相容。但是,有些 Play 遊戲專屬的功能,會以擴充功能的形式給 Unity 提供的標準社群介面使用。

Social.Active 物件是指向 ISocialPlatform 介面的參照,可用來存取標準 API 呼叫。只要將 Social.Active 物件層級轉換為可提供其他方法的 PlayGamesPlatform 類別,即可存取非標準的 Google Play 遊戲服務擴充功能。

使用外掛程式而不覆寫預設社群平台

如果呼叫 PlayGamesPlatform.Activate,Google Play 遊戲服務就會成為您實作的預設社群平台,這表示 Google Play 遊戲服務外掛程式會對 SocialSocial.Active 中的方法發出靜態呼叫。使用此外掛程式的多數遊戲都會採用此行為。

不過,如果您出於某種原因,希望將預設實作社群平台保持可存取的狀態 (例如,需要透過此社群平台將成就和排行榜提交到其他社群平台),可以使用 Google Play 遊戲服務外掛程式,但不覆寫預設社群平台。步驟如下:

  1. 不要呼叫 PlayGamesPlatform.Activate
  2. 如果想對 Social 類別呼叫名為 Xyz 的方法,請不要呼叫 Social.Xyz,而是改為呼叫 PlayGamesPlatform.Instance.Xyz
  3. 與 Google Play 遊戲服務互動時,不要使用 Social.Active,請改用 PlayGamesPlatform.Instance

透過這種做法,甚至可以將得分和成就同時提交到兩個以上的社群平台:

    // Submit achievement to original default social platform
    Social.ReportProgress("MyAchievementIdHere", 100.0f, callback);

    // Submit achievement to Google Play
    PlayGamesPlatform.Instance.ReportProgress("MyGooglePlayAchievementIdHere", 100.0f, callback);

驗證登入服務

遊戲開啟後,系統會自動使用登入服務嘗試連線至 Play 遊戲服務。如果連線成功,遊戲就會顯示登入提示,且隨時可以使用 Unity 專用 Google Play 遊戲服務外掛程式。

如果使用者從未在這部裝置上使用過 Google Play 遊戲服務,系統會自動引導玩家進行一次性設定,建立 Play 遊戲帳戶。

在指令碼的 Start 方法中監聽自動登入嘗試結果、擷取驗證狀態,以及在使用者未登入時停用 Play 遊戲服務功能。

如果 Unity 外掛程式版本早於 v11,您就無法使用登入功能。

    using GooglePlayGames;

    public void Start() {
      PlayGamesPlatform.Instance.Authenticate(ProcessAuthentication);
    }

    internal void ProcessAuthentication(SignInStatus status) {
      if (status == SignInStatus.Success) {
        // Continue with Play Games Services
      } else {
        // Disable your integration with Play Games Services or show a login button
        // to ask users to sign-in. Clicking it should call
        // PlayGamesPlatform.Instance.ManuallyAuthenticate(ProcessAuthentication).
      }
    }

結果程式碼是一項列舉,可用來找出登入失敗的原因。

如果您偏好使用 Unity 的 Social 平台,可以改用下列程式碼:

  using GooglePlayGames;

  public void Start() {
    PlayGamesPlatform.Activate();
    Social.localUser.Authenticate(ProcessAuthentication);
  }

您必須先從 Authenticate 取得成功的傳回值,才能發出任何 Google Play 遊戲服務 API 呼叫。因此,建議遊戲在呼叫回呼之前持續顯示待機畫面,確保使用者先完成驗證才開始玩遊戲。

使用 Play 應用程式簽署功能

Google 會使用 Play 應用程式簽署功能管理及保護應用程式的簽署金鑰。您可以使用 Play 應用程式簽署功能,簽署最佳化發行版 Android App Bundle 檔案。Play 應用程式簽署功能會將您的應用程式簽署金鑰儲存在 Google 的安全基礎架構上。如要使用 Play 應用程式簽署,您必須先從 Unity Hub 建立並下載 AAB 檔案。接著,您可以將 AAB 檔案上傳至 Play 管理中心,並建立內部測試版本。

建立 AAB 檔案

如要在 Unity Hub 中建立 AAB 檔案,請按照下列步驟操作:

  1. 在 Unity Hub 中,依序點選「File」>「Build settings」
  2. 選取「Build App Bundle ( Google Play )」

    詳情請參閱「Android 建構設定參考資料」。

  3. 按一下「Build」

  4. 從 Unity Hub 下載 AAB 檔案。

建立內部測試版本

如要在 Play 管理中心建立內部測試版本並新增測試人員,請按照下列步驟操作:

  1. Google Play 管理中心選取遊戲。
  2. 前往「測試與發布」頁面 (依序點選「測試」>「內部測試」)。
  3. 按一下「上傳」,然後選取 AAB 檔案。
  4. 在「發布詳細資料」欄位中輸入名稱。
  5. 點按「下一步」並查看發布內容詳細資料。
  6. 按一下 [儲存並發佈]
  7. 在「測試人員」分頁中,按一下「建立電子郵件名單」,最多可新增 100 位測試人員。

    詳情請參閱「內部測試:最多可管理 100 位測試人員」。

  8. 在「意見回饋網址或電子郵件地址」中,輸入意見回饋網址或電子郵件地址。

  9. 按一下 [儲存]

驗證應用程式簽署憑證

  1. Google Play 管理中心選取遊戲。
  2. 前往「測試及發布」頁面 (依序點選「設定」>「應用程式簽署」)。
  3. 驗證應用程式簽署憑證。

建構並執行專案

此時,您可以建構及執行遊戲專案。遊戲啟動時,系統會嘗試自動登入。

您需要啟用 USB 偵錯功能的實體 Android 裝置,或是可執行開發專案的模擬器。

擷取伺服器驗證碼

您需要從用戶端應用程式取得驗證碼,並傳遞至網路伺服器應用程式,才能代表目前玩家存取後端網路伺服器上的 Google API。接著,系統可用這組驗證碼交換存取權杖,用來呼叫各種 API。如需瞭解工作流程,請參閱適用於網站的 Google 登入功能

如何取得伺服器端存取碼:

  1. 在 Play 管理中心新增遊戲的網頁用戶端 ID。
    1. Google Play 管理中心選取遊戲。
    2. 在「設定」頁面 (依序點選「拓展使用者數量」>「Play 遊戲服務」>「設定與管理」>「設定」),按一下「新增憑證」
    3. 在「新增憑證」頁面中,選取「遊戲伺服器」
    4. 產生 OAuth 2.0 用戶端 ID
    5. 請記下用戶端 ID 值。稍後需要提供這個值。
  2. 將網頁用戶端 ID 新增至 Unity Hub。

    1. 在 Unity Hub 中設定 Unity 專用 Google Play 遊戲外掛程式並登入
    2. 在 Unity Hub 中,依序前往「Window」>「Google Play Games」>「Setup」>「Android Setup」
    3. 輸入用戶端 ID 值。
  3. 擷取其他範圍的伺服器驗證碼。

    C#

    using GooglePlayGames.BasicApi;
    
    // Define selectedScope having additional identity scopes.
    private List selectedScopes = new List();
    
    // Add scopes you want to request.
    selectedScopes.Add(AuthScope.OPEN_ID);
    selectedScopes.Add(AuthScope.PROFILE);
    selectedScopes.Add(AuthScope.EMAIL);
    
    // Call RequestServerSideAccess with additional scopes and retrieve
    // authcode and grantedscopes list.
    PlayGamesPlatform.Instance.RequestServerSideAccess(
        /* forceRefreshToken= */ false,selectedScopes
        (AuthResponse authResponse) =>
        {
        string authCode = authResponse.GetAuthCode();
        List grantedScopes = authResponse.GetGrantedScopes();
    
        // send authCode to server...
    });

設定並新增功能