使用 Firebase 遠端設定檢測 Unity 遊戲

1. 簡介

您可以在應用程式中,使用 Firebase 遠端設定定義鍵值組 (也稱為參數),並在雲端更新這些值,這樣一來,您就能修改應用程式的外觀和行為,不必發布應用程式更新。

您將在範例遊戲「MechaHamster: Level Up with Firebase Edition」中新增這項功能。這個範例遊戲是經典 Firebase 遊戲 MechaHamster 的新版本,移除了大部分內建的 Firebase 功能,讓您有機會實作新的 Firebase 用途。

為確保應用程式能正常運作,您會在範例遊戲程式碼中設定值的預設設定,而這些值可由您在 Firebase 控制台的遠端設定中設定的值覆寫。

課程內容

  • 如何在雲端設定及擷取遠端設定值
  • 如何檢測 Unity C# 程式碼,自動使用擷取的值
  • 如何以 JSON 值形式儲存、檢測及覆寫複合值/物件
  • 如何使用遠端設定條件,為不同的使用者群組提供不同的值變數

事前準備

  • Unity 2019.1.0f1 以上版本,並支援 iOS 和/或 Android 建構作業
  • 實體 Android/iOS 裝置或模擬器/模擬器,用於建構及執行遊戲

2. 設定開發環境

下列各節說明如何下載「Level Up with Firebase」程式碼、在 Unity 中開啟,以及新增 Firebase 專案。這個 Level Up with Firebase 範例遊戲用於其他幾個 Firebase + Unity 程式碼研究室,因此您可能已完成本節中的工作。如果是,您可以略過這些步驟,直接前往「為 Unity 新增 Firebase SDK」,將遠端設定新增至範例遊戲程式碼。

下載程式碼

從指令列複製本程式碼研究室的 GitHub 存放區

git clone https://github.com/firebase/level-up-with-firebase

或者,如果您未安裝 Git,可以將存放區下載為 ZIP 檔案

在 Unity 編輯器中開啟「Level Up with Firebase」

  1. 啟動 Unity Hub,然後在「Projects」(專案) 分頁中,按一下「Open」(開啟) 旁邊的下拉式箭頭
  2. 按一下「從磁碟新增專案」
  3. 前往包含程式碼的目錄,然後按一下「確定」
  4. 如果系統提示,請選取要使用的 Unity 編輯器版本和目標平台 (Android 或 iOS)。
  5. 按一下專案名稱「level-up-with-firebase」,專案就會在 Unity 編輯器中開啟。
  6. 如果編輯器未自動開啟,請在 Unity 編輯器的「Project」分頁中,依序開啟「Assets」 >「Hamster」,然後開啟 MainGameScene

如要進一步瞭解如何安裝及使用 Unity,請參閱「在 Unity 中工作」。

3. 將 Firebase 新增至 Unity 專案

建立 Firebase 專案

  1. 使用 Google 帳戶登入 Firebase 控制台
  2. 按一下按鈕建立新專案,然後輸入專案名稱 (例如 LevelUpWithFirebase)。
  3. 按一下「繼續」
  4. 如果系統提示,請詳閱並接受 Firebase 條款,然後按一下「繼續」
  5. (選用) 在 Firebase 控制台中啟用 AI 輔助功能 (稱為「Gemini in Firebase」)。
  6. 在本程式碼研究室中,您需要 Google Analytics 才能充分運用 Firebase 產品,因此請開啟 Google Analytics 選項的切換按鈕。按照畫面上的指示設定 Google Analytics。
  7. 按一下「建立專案」,等待專案佈建完成,然後按一下「繼續」

向 Firebase 註冊應用程式

  1. 開啟 Firebase 控制台,然後在專案總覽頁面中間點選 Unity 圖示,啟動設定工作流程。如果已在 Firebase 專案中新增應用程式,請點選「新增應用程式」,顯示平台選項。
  2. 選取要同時註冊 Apple (iOS) 和 Android 版本目標。
  3. 輸入 Unity 專案的平台專屬 ID。在本程式碼研究室中,請輸入以下內容:
    • Apple (iOS):在「iOS 軟體包 ID」欄位中輸入 com.google.firebase.level-up
    • Android:在「Android 套件名稱」欄位中輸入 com.google.firebase.level_up
  4. 視需要輸入 Unity 專案的平台專屬暱稱。
  5. 按一下「註冊應用程式」,然後前往「下載設定檔」部分。
  6. 針對第一次未執行的建構目標重複執行這個程序。

新增 Firebase 設定檔

按一下「註冊應用程式」後,系統會提示您下載兩個設定檔 (每個建構目標各一個設定檔)。Unity 專案需要這些檔案中的 Firebase 中繼資料,才能連結至 Firebase。

  1. 下載兩個可用的設定檔:
    • Apple (iOS):下載 GoogleService-Info.plist
    • Android:下載 google-services.json
  2. 開啟 Unity 專案的「Project」視窗,然後將兩個設定檔都移入「Assets」資料夾。
  3. 返回 Firebase 主控台,在設定工作流程中點選「下一步」,然後繼續新增適用於 Unity 的 Firebase SDK。

注意:如要稍後重新下載這些檔案,請開啟專案的一般設定,向下捲動至「您的應用程式」部分,然後點選所需設定檔的下載按鈕。

新增 Firebase Unity SDK

  1. 在 Firebase 主控台中,按一下「下載 Firebase Unity SDK」
  2. 將 SDK 解壓縮至方便使用的位置。
  3. 在開啟的 Unity 專案中,依序前往「Assets」 >「Import Package」 >「Custom Package」
  4. 在「Import package」對話方塊中,前往包含已解壓縮 SDK 的目錄,選取 FirebaseAnalytics.unitypackage,然後按一下「Open」
  5. 在隨即顯示的「Import Unity Package」對話方塊中,按一下「Import」
  6. 重複上述步驟,匯入下列兩個套件:
    • FirebaseRemoteConfig.unitypackage
    • FirebaseCrashlytics.unitypackage
      Crashlytics 是一款輕巧的即時當機回報工具,可協助您追蹤穩定性問題、排定問題的優先順序並加以解決,避免應用程式品質受到影響。如果您先前未使用過,建議完成 Unity 適用的 Crashlytics 學習路徑
  7. 返回 Firebase 控制台,然後在設定工作流程中按一下「下一步」

如要進一步瞭解如何將 Firebase SDK 新增至 Unity 專案,請參閱「其他 Unity 安裝選項」。

4. 設定遠端設定預設值並擷取新值

在本程式碼研究室中,您將更新使用程式碼中定義的值或在 Unity 編輯器中序列化的物件,改為使用透過遠端設定插碼的值。您可以使用 SetDefaultsAsync 為每個參數設定預設值,確保應用程式在連線至遠端設定後端前能正常運作。應用程式會從遠端設定擷取新值並啟用,以便在程式碼中使用,確保應用程式保持在最新狀態。

如要從遠端設定擷取新值,Assets/Hamster/Scripts/MainGame.cs 檔案中已有許多未實作的方法,必須完成這些方法。

  1. MainGame.cs 中新增下列 using 陳述式:
    using Firebase.Crashlytics;
    using Firebase.Extensions;
    using Firebase.RemoteConfig;
    
    Firebase.Extensions 模組包含 C# Tasks API 的一些擴充功能,可協助簡化使用回呼管理初始化程序的流程。
  2. 將現有的 InitializeCommonDataAndStartGame() 方法替換為目前未實作的方法 InitializeFirebaseAndStartGame(),藉此將 Firebase 初始化作業新增至 MainGame.cs Start() 方法:
    void Start()
    {
       Screen.SetResolution(Screen.width / 2, Screen.height / 2, true);
       InitializeFirebaseAndStartGame();
    }
    
  3. MainGame.cs 中找出 InitializeFirebaseAndStartGame()。宣告應用程式變數,並覆寫方法實作,如下所示:
    public Firebase.FirebaseApp app = null;
    
    // Begins the firebase initialization process and afterwards, opens the main menu.
    private void InitializeFirebaseAndStartGame()
    {
       Firebase.FirebaseApp.CheckAndFixDependenciesAsync()
       .ContinueWithOnMainThread(
          previousTask =>
          {
             var dependencyStatus = previousTask.Result;
             if (dependencyStatus == Firebase.DependencyStatus.Available) {
             // Create and hold a reference to your FirebaseApp,
             app = Firebase.FirebaseApp.DefaultInstance;
             // Set the recommended Crashlytics uncaught exception behavior.
             Crashlytics.ReportUncaughtExceptionsAsFatal = true;
             SetRemoteConfigDefaults();
             } else {
             UnityEngine.Debug.LogError(
                $"Could not resolve all Firebase dependencies: {dependencyStatus}\n" +
                "Firebase Unity SDK is not safe to use here");
             }
          });
    }
    
  4. Firebase 初始化呼叫 SetRemoteConfigDefaults 成功後,會設定應用程式內預設值。將未實作的 SetRemoteConfigDefaults 方法替換為下列內容:
    private void SetRemoteConfigDefaults()
    {
       var defaults = new System.Collections.Generic.Dictionary < string, object > ();
       defaults.Add(
          Hamster.MapObjects.AccelerationTile.AccelerationTileForceKey,
          Hamster.MapObjects.AccelerationTile.AccelerationTileForceDefault);
       defaults.Add(
          Hamster.States.MainMenu.SubtitleOverrideKey,
          Hamster.States.MainMenu.SubtitleOverrideDefault);
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       remoteConfig.SetDefaultsAsync(defaults).ContinueWithOnMainThread(
          previousTask =>
          {
             FetchRemoteConfig(InitializeCommonDataAndStartGame);
          }
       );
    }
    

5. 視需要擷取並啟用新值

我們現在需要完成現有的 FetchRemoteConfig 方法。這會使用名為 onFetchAndActivateSuccessful 的回呼參數,將呼叫鏈結至遠端設定的方法 FetchAsync (從遠端設定擷取新值) 和 ActivateAsync (啟用取得的值,以便在程式碼中使用)。

我們在上一個步驟中新增的啟動程式碼會呼叫 FetchRemoteConfig,並以 InitializeCommonDataAndStartGame 做為回呼,以便在序列結尾啟動遊戲。您可以將替代回呼傳遞至 FetchRemoteConfig,以便使用不同結果叫用擷取作業。舉例來說 (您稍後會實作),您可以傳遞開啟新 UI 選單的方法,這類選單取決於遠端設定值。這樣一來,系統只會在擷取並啟用這些值後,才會開啟選單。

  1. 將下列程式碼貼入 FetchRemoteConfig
    public void FetchRemoteConfig(System.Action onFetchAndActivateSuccessful)
    {
       if(app==null)
       {
          Debug.LogError($"Do not use Firebase until it is properly initialized by calling {nameof(InitializeFirebaseAndStartGame)}.");
          return;
       }
    
       Debug.Log("Fetching data...");
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       remoteConfig.FetchAsync(System.TimeSpan.Zero).ContinueWithOnMainThread(
          previousTask=>
          {
             if (!previousTask.IsCompleted)
             {
             Debug.LogError($"{nameof(remoteConfig.FetchAsync)} incomplete: Status '{previousTask.Status}'");
             return;
             }
             ActivateRetrievedRemoteConfigValues(onFetchAndActivateSuccessful);
          });
    }
    
  2. 接著,完成 ActivateRetrievedRemoteConfigValues 方法,該方法會接收傳入的回呼 onFetchAndActivateSuccessful。啟用完成後,系統會叫用指定的回呼:
    private void ActivateRetrievedRemoteConfigValues(System.Action onFetchAndActivateSuccessful)
    {
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       var info = remoteConfig.Info;
       if(info.LastFetchStatus == LastFetchStatus.Success)
       {
          remoteConfig.ActivateAsync().ContinueWithOnMainThread(
             previousTask =>
             {
             Debug.Log($"Remote data loaded and ready (last fetch time {info.FetchTime}).");
             onFetchAndActivateSuccessful();
             });
       }
    }
    

SetRemoteConfigDefaults 從初始化環境向下游呼叫時,ActivateRetrievedRemoteConfigValues 會呼叫先前的起點 InitializeCommonDataAndStartGame,藉此開啟主選單來啟動遊戲。

6. 設定遠端設定載入策略

如要在應用程式使用期間的其他時間擷取及啟用值,您需要再次呼叫這些函式,且如有任何物件已快取值,則必須通知這些物件執行更新。如要制定重新擷取遠端設定值的策略,請考量何時需要新值,以及何時應啟動新值的擷取和啟用程序,避免值在使用期間變更。

目前實作方式是在應用程式啟動時擷取並啟用遠端設定值。選單變更期間,擷取作業可能會隱藏,同時在轉換期間封鎖互動。此外,這通常也是取得新值的最佳時機,因為選單狀態的變更通常可用來瞭解玩家「要去哪裡」,並預測會使用哪個值。

查看 Mechahamster 的選單系統,新增會封鎖 UI 的選單重新整理作業最簡單的方法,就是在主選單繼續執行之前呼叫該作業 (具體來說,就是從另一個選單返回時),並將 UI 顯示方法做為 onFetchAndActivateSuccessful 回呼傳遞。「關卡選擇」選單也適用相同做法。

在應用程式啟動時進行初始載入後,任何透過主選單進行的選單導覽都會由第一個處理,而重新進入「關卡選擇」選單也會導致重新整理。進入關卡選單的初始入口並不重要,因為只能從主選單存取,因此已涵蓋在內。

如要在應用程式中啟用這項功能,請完成主選單和層級選取檔案中的相關方法,這會封鎖 UI 顯示畫面,直到 FetchAsyncActivateAsync 完成為止:

  1. 開啟 Assets/Hamster/Scripts/States/MainMenu.cs,並將現有的 Resume 方法替換為下列程式碼:
    public override void Resume(StateExitValue results) {
       CommonData.mainGame.SelectAndPlayMusic(CommonData.prefabs.menuMusic, true);
       CommonData.mainGame.FetchRemoteConfig(InitializeUI);
    }
    
  2. 儲存檔案。
  3. 開啟 Assets/Hamster/Scripts/States/BaseLevelSelect.cs,並將現有的 Resume 方法替換為下列內容:
    public override void Resume(StateExitValue results) {
       CommonData.mainGame.FetchRemoteConfig(ShowUI);
    }
    
  4. 儲存檔案。

7. 偵錯/驗證擷取行為

此時建議進行診斷/驗證檢查。您可透過下列程序手動測試應用程式,以及應用程式擷取及啟用遠端設定值的方式/情況。

這項資訊會列印在模擬器、裝置或編輯器記錄中。如果是 iOS,您可以在 Xcode 中查看裝置和模擬器記錄。如為 Android,請執行 adb logcat 查看記錄。如果您在 Unity 中按下編輯器中的「Play」執行程式碼,記錄會顯示在「Console」分頁中。

  1. 重新建構並執行應用程式 (在編輯器中,使用裝置或模擬器)。
  2. 遊戲的「Main Menu」(主選單) 顯示後,請檢查遊戲的記錄輸出內容,其中應包含 FetchRemoteConfigActivateRetrievedRemoteConfigValuesDebug.Log 產生的記錄。這些訊息應會顯示「正在擷取資料...」和「已載入遠端資料,準備就緒」。請注意這些訊息開頭的時間戳記。
  3. 在遊戲中按下「授權」
  4. 按一下「確定」
  5. 等待遊戲顯示主選單
  6. 查看遊戲的記錄輸出內容,應該會與上一個步驟的內容類似,但會顯示新的時間戳記 (與執行遊戲的系統時鐘所設定的時間相符)。
  7. 在遊戲中按下「Play」(播放)
  8. 按下「Let's Roll」(快出擊吧!)
  9. 使用鍵盤方向鍵將球移至球門,即可開啟「關卡完成」選單。
  10. 按下「音量」
  11. 等待「關卡選擇」選單載入。
  12. 再次查看遊戲的記錄輸出內容。這應與先前步驟中的記錄訊息相符,但時間戳記較新 (與您執行遊戲的系統時鐘所設定的時間相符)。

如果應用程式中未顯示上述任一項目,表示擷取和啟用流程 (或裝置) 的部分設定可能錯誤。如果沒有顯示第一個記錄,遊戲可能無法啟動。查看編輯器控制台或裝置/模擬器記錄,瞭解專案/環境的警告和錯誤,並進行調查。問題可能很簡單,例如連上網際網路即可解決。

如果載入選單的初始記錄會顯示,但後續記錄不會顯示,請調查/重新實作 Assets/Hamster/Scripts/States/MainMenu.csAssets/Hamster/Scripts/States/BaseLevelSelect.cs 中的 Resume 方法。

8. 檢測程式碼

您已在 SetDefaultsAsync() 中設定應用程式內參數值,並透過 FetchAsync()ActivateAsync() 提供最新版本,現在可以在程式碼中參照及使用這些值。

在遠端設定後端設定值後,請擷取並啟用這些值 (或同時執行這兩項操作),應用程式即可使用這些值。如要使用這些值,請呼叫 GetValue(string key),並選擇參數鍵做為引數。這會傳回 ConfigValue,其中包含可做為各種支援型別存取值的屬性:stringboollongdouble。在這個專案和大多數遊戲用途中,您必須將最後兩種類型轉換為更慣用的 intfloat。為確保這些轉換不會造成問題,請確認在遠端設定中設定的初始值,位於您將在應用程式程式碼中使用的型別有效範圍內。

  1. 在下列檔案頂端新增 using Firebase.RemoteConfig;,匯入遠端設定:
    • Assets/Hamster/Scripts/States/MainMenu.cs
    • Assets/Hamster/Scripts/MapObjects/AccelerationTile.cs
  2. 取代 AccelerationTile.csStart 方法:
    private void Start() {
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       Acceleration = (float)remoteConfig.GetValue(AccelerationTileForceKey).DoubleValue;
    }
    
    這項變更生效後,加速度動態磚施加的力道會改為從遠端設定接收。
  3. 編輯 MainMenu.csInitializeUI 方法主體:
    private void InitializeUI() {
       if (menuComponent == null) {
          menuComponent = SpawnUI<Menus.MainMenuGUI>(StringConstants.PrefabMainMenu);
       }
    
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       var subtitleOverride = JsonUtility.FromJson<Menus.MainMenuGUI.SubtitleOverride>(
          remoteConfig.GetValue(SubtitleOverrideKey).StringValue);
       // Only sets values if all fields of the override are non-default.
       if(subtitleOverride != null && subtitleOverride.IsValidOverride())
       {
          menuComponent.MenuSubtitleText.text = subtitleOverride.text;
          menuComponent.MenuSubtitleText.fontSize = subtitleOverride.fontSize;
          menuComponent.MenuSubtitleText.color = subtitleOverride.textColor;
       }
       ShowUI();
    }
    
    在此,如果雲端中的所有欄位都設為類型預設值以外的值,subtitleOverride 就會變更主選單畫面上的副標題。

9. 從遠端設定參數值

應用程式完成全面檢測後,即可在遠端設定伺服器上設定參數和值。在本程式碼研究室中,我們將使用 Firebase 控制台設定這項功能。

  1. Firebase 控制台中開啟專案。
  2. 從選單中選取「遠端設定」,即可查看遠端設定主頁。
  3. 針對您在應用程式中定義並列於下表的每個參數,按一下「新增參數」,貼上參數名稱 (鍵),選取表格中列出的「資料類型」,停用「使用應用程式預設值」,然後貼上新的預設值:

    參數名稱 (鍵)

    資料類型

    預設值

    acceleration_tile_force

    數字

    100

    subtitle_override

    JSON

    {"text":"We overwrote the subtitle","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}

    遠端設定參數編輯器,其中已填入 acceleration_tile_force
  4. 按一下 [儲存] 以儲存變更。
  5. 按一下「發布」,發布新設定並讓遊戲使用新值。
  6. 設定這些遠端參數後,請再次執行應用程式,並觀察這些參數如何覆寫原始預設值。已啟用「Debug Menu」的 Mechahamster 主畫面

10. 使用遠端設定條件放送變體

您可以根據使用者的語言、所在位置、時段或使用的平台,量身打造應用程式體驗。遠端設定條件可讓您單獨或一併使用這些和其他屬性,向使用者提供不同的值 (稱為變體)。

條件的常見用途之一,是變更 iOS 和 Android 平台之間的內容。請按照下列步驟導入條件,根據使用的平台提供不同的 subtitle_override 值。

  1. Firebase 控制台中開啟專案的「遠端設定」分頁。
  2. 按一下「subtitle_override.」的編輯按鈕
  3. 按一下左下角的「新增」
  4. 在隨即顯示的下拉式選單中,將滑鼠游標懸停在「條件值」上,然後按一下「建立新條件」遠端設定參數編輯器:\n 條件值選項
  5. 系統出現提示時,請為條件命名,如果是指定 iOS,請命名為「is iOS」,如果是指定 Android,請命名為「is Android」。如果您同時指定這兩者,請在此選擇其中一個,並在程式碼研究室的其餘部分使用。使用「Define a new condition」(定義新條件) 對話方塊定義 iOS 專屬條件
  6. 在「適用於」下方,按一下「選取...」下拉式選單,然後選取「平台」。然後選取合適的平台。使用「定義新條件」編輯器選取 iOS 平台
  7. 按一下「建立條件」來建立條件。「編輯參數」對話方塊會再次顯示,您現在可以設定值:
    • 如果您指定 Android,請將「Value」設為:
      {"text":"Level Up Android Version","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}
      
    • 如果您指定 iOS,請將「值」設為:
      {"text":"Level Up iOS Version","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}
      
  8. 按一下 [儲存] 以儲存變更。
  9. 按一下「發布」,發布新設定並讓遊戲使用新值。

再次建構及執行遊戲時,您應該會看到遊戲的副標題已替換為平台專屬的變體。

11. 設定遠端設定,接收即時更新

遠端設定現在可以即時監聽及處理遠端設定範本的更新。應用程式可以訂閱新的即時遠端設定 API,監聽設定變更和更新的值。

運作方式

如要監聽更新,應用程式必須實作訂閱 OnConfigUpdateListener 事件的方法。訂閱一或多個設定更新監聽器後,系統會自動擷取新的遠端設定範本,並呼叫訂閱的處理常式,可用於執行回應邏輯,例如啟用新值並提供給應用程式的其餘部分。

導入即時遠端設定

如要說明遊戲中的運作方式,請對程式碼進行下列變更。

建立設定更新處理常式

使用設定更新事件的第一步,是建立能夠監聽該事件的方法。在 Assets/Hamster/Scripts/MainGame.cs 中放置下列方法:

   void ActivateValuesOnConfigUpdate( object sender, ConfigUpdateEventArgs args)
   {
      if (args.Error != RemoteConfigError.None) {
         Debug.Log($"Error occurred while listening: {args.Error}");
         return;
      }

      Debug.Log("Updated keys: " + string.Join(", ", args.UpdatedKeys));
      // Activate all fetched values and then logs.
      var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
      remoteConfig.ActivateAsync().ContinueWithOnMainThread(
         task => {
            Debug.Log($"Keys from {nameof(ActivateValuesOnConfigUpdate)} activated.");
         });
   }

這個方法會啟動新值,並在記錄中列印更新後的鍵和成功訊息。

訂閱 Update 事件

如要在呼叫事件時啟動 ActivateValuesOnConfigUpdate,請將其訂閱至事件。將 Assets/Hamster/Scripts/MainGame.cs 中的 InitializeCommonDataAndStartGame() 方法替換為下列內容:

   void InitializeCommonDataAndStartGame()
   {
      CommonData.prefabs = FindObjectOfType<PrefabList>();
      CommonData.mainCamera = FindObjectOfType<CameraController>();
      CommonData.mainGame = this;

      Screen.orientation = ScreenOrientation.LandscapeLeft;

      musicPlayer = CommonData.mainCamera.GetComponentInChildren<AudioSource>();

      CommonData.gameWorld = FindObjectOfType<GameWorld>();

      // Set up volume settings.
      MusicVolume = PlayerPrefs.GetInt(StringConstants.MusicVolume, MaxVolumeValue);
      // Set the music to ignore the listeners volume, which is used for sound effects.
      CommonData.mainCamera.GetComponentInChildren<AudioSource>().ignoreListenerVolume = true;
      SoundFxVolume = PlayerPrefs.GetInt(StringConstants.SoundFxVolume, MaxVolumeValue);

      // Subscribes to on config update after first initial fetch and activate
      FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener += ActivateValuesOnConfigUpdate;

      stateManager.PushState(new States.MainMenu());
   }

新的一行 (以 += ActivateValuesOnConfigUpdate; 結尾) 會將事件處理常式訂閱至事件。

處理常式的擁有物件遭到毀損時取消訂閱

為避免空值參照錯誤,訂閱事件的方法所屬物件遭到刪除時,必須取消訂閱該方法。在 Assets/Hamster/Scripts/MainGame.cs 中新增下列方法:

   private void OnDestroy() 
   {
      FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener -= ActivateValuesOnConfigUpdate;
   }

測試新功能

如要驗證新功能,請試用您建構的應用程式。下列程序需要您使用實際裝置讀取記錄並進行偵錯

變更 acceleration_tile_force 並觀察

啟動應用程式後,在 Firebase 控制台的遠端設定部分中:

  1. 按下「acceleration_tile_force」旁的編輯按鈕。

dc602d4db54e50a4.png

  1. 將值變更為「120」,然後按下「儲存」

fcbc1df848f88009.png

  1. 按一下「發布變更」按鈕。

3785c1e00e7a6359.png

  1. 檢查記錄。
  2. 如果看到以「Error occurred while listening」開頭的記錄訊息,請閱讀其餘部分,並嘗試使用該訊息列印的錯誤訊息進行偵錯。
  3. 如果看到以「Updated keys」開頭的記錄,表示應用程式已收到變更的值。
  4. 如果兩者皆未顯示,請查看其餘記錄,然後重新檢閱「建立設定更新處理常式」中的操作說明、重新測試,並重新檢查記錄,判斷是否有任何問題。

12. 恭喜!

您已使用遠端設定,在應用程式中擷取遊戲內值,並使用條件提供不同變體,從遠端控制這些值!

涵蓋內容

  • 如何設定及擷取遠端設定值
  • 如何使用擷取的值來檢測 Unity C# 程式碼
  • 如何以 JSON 值形式儲存、檢測及覆寫複合值/物件
  • 如何使用遠端設定條件,放送不同的值變體

後續步驟

請參閱參數值優先順序,進一步瞭解應用程式執行個體使用具有多個值的參數 (因條件或地區而異) 時,會取得哪些值的邏輯。