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

1. 簡介

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

請將這項新功能新增至範例遊戲「MechaHamster:使用 Firebase 版本升級」。這款範例遊戲是傳統版 Firebase 遊戲 MechaHamster 的新版本,當中移除了大部分的內建 Firebase 功能,讓您有機會在原本的位置導入新的 Firebase 功能。

為確保應用程式能正常運作,請針對範例遊戲程式碼的值調整預設設定。如要覆寫這些值,您可以在 Firebase 控制台的遠端設定中設定這些值。

課程內容

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

事前準備

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

2. 設定開發環境

以下各節將說明如何下載「Level Up with Firebase」程式碼,並在 Unity 中開啟這個程式碼,並新增 Firebase 專案。其他許多 Firebase 和 Unity 程式碼研究室都會使用這個「使用 Firebase 升級」範例遊戲,因此你可能已經完成本節所述的工作。在這種情況下,您可以略過這些步驟,並繼續新增 Unity 專用 Firebase SDK,將遠端設定新增至範例遊戲程式碼。

下載程式碼

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

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

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

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

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

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

3. 將 Firebase 新增至您的 Unity 專案

建立 Firebase 專案

  1. Firebase 控制台,按一下「新增專案」
  2. 如要建立新專案,請輸入所需專案名稱。
    這麼做也會將專案 ID (顯示在專案名稱下方) 設為根據專案名稱顯示的內容。您也可以在專案 ID 上按一下「編輯」圖示,進一步自訂專案 ID。
  3. 如果出現提示訊息,請詳閱並接受 Firebase 條款
  4. 按一下 [繼續]
  5. 選取「為這項專案啟用 Google Analytics」選項,然後按一下「繼續」
  6. 選取要使用的現有 Google Analytics 帳戶,或選取「建立新帳戶」來建立新帳戶。
  7. 按一下 [Create Project]
  8. 專案建立完成後,按一下「Continue」

透過 Firebase 註冊應用程式

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

新增 Firebase 設定檔

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

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

注意:您日後隨時可以重新下載這些檔案,方法是開啟專案的一般設定,向下捲動至「您的應用程式」部分,然後點選所需設定檔的下載按鈕。

新增 Unity 專用 Firebase SDK

  1. 按一下 Firebase 控制台中的「Download Firebase Unity SDK」(下載 Firebase Unity SDK)
  2. 將 SDK 解壓縮到方便的位置。
  3. 在開放式 Unity 專案中,前往「Assets」>「Import 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. 將下列 using 陳述式新增至 MainGame.cs
    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 顯示方法做為 onFetchAndActivateSuccessful 回呼傳遞。您也可以針對「等級選擇」選單執行相同步驟。

在應用程式啟動時的初始載入,任何透過主選單瀏覽的選單瀏覽作業都會由最先處理,而重新進入「Level Select」選單時也會重新整理。初始進入層級選取選單並不重要,因為這個選單只能從主選單存取,因此已涵蓋內容。

如要在應用程式中啟用這項功能,請在主選單中完成相關方法,然後選取檔案,系統就會在 FetchAsyncActivateAsync 完成前封鎖 UI 顯示內容:

  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 來查看記錄。如果您在編輯器中按下「Play」即可在 Unity 中執行程式碼,記錄會顯示在「Console」分頁中。

  1. 重建並執行應用程式 (在編輯器中使用裝置或模擬器)。
  2. 顯示遊戲的主選單後,請檢查遊戲的記錄輸出,其中應包含 Debug.LogFetchRemoteConfigActivateRetrievedRemoteConfigValues 中產生的記錄。畫面上應該會顯示「正在擷取資料...」訊息。以及「遠端資料已載入且準備就緒」訊息。並記下這些訊息開頭的時間戳記。
  3. 在遊戲中按下「授權」
  4. 按下「確定」
  5. 等待遊戲顯示主選單
  6. 查看遊戲的記錄輸出內容,應該與先前步驟中的輸出內容類似,而且有新的時間戳記 (與執行遊戲的系統時鐘設定時間相符)。
  7. 在遊戲中,按下「播放」
  8. 按下「Let's Roll」
  9. 使用鍵盤方向鍵前往目標頁面,開啟「關卡完成」選單。
  10. 按下「Levels」
  11. 等待系統載入「Level Select」選單。
  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

    子標題覆寫

    JSON

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

    已填入\nacceleration_tile_force 的遠端設定參數編輯器
  4. 按一下 [儲存] 以儲存變更。
  5. 按一下「發布」即可發布新設定,讓新值提供給遊戲使用。
  6. 設定這些遠端參數後,請再次執行應用程式,觀察這些參數如何覆寫原始預設值。啟用偵錯選單的 Mechahamster 主畫面\n

10. 使用遠端設定條件提供變化版本

建議您根據使用者使用的語言、所在位置、時段或使用的平台,提供貼近他們需求的應用程式體驗。遠端設定條件可讓您個別或組合使用這些屬性,或同時運用向使用者提供不同的值 (稱為變化版本)。

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

  1. Firebase 控制台開啟專案的「遠端設定」分頁。
  2. 按一下 subtitle_override. 的編輯按鈕
  3. 按一下左下角的「新增」
  4. 在出現的下拉式選單中,將滑鼠遊標懸停在「條件值」上,然後按一下「建立新條件」遠端設定參數編輯器:\n 條件值選項
  5. 在系統提示時,將條件命名為「為 iOS」指定 iOS 或「是 Android」請務必指定 Android 裝置如果您同時指定這兩種目標,只要在這裡選擇其中一個,即可用於程式碼研究室的其他部分。使用「定義新條件」對話方塊\n 定義 iOS 專屬條件
  6. 在「Apply if...」下方,按一下「Select...」下拉式選單,然後選取「Platform」。然後選取適當的平台。使用「定義新條件」編輯器選取 iOS 平台
  7. 按一下「建立條件」即可建立條件。「編輯參數」對話方塊會重新顯示,您現在可以設定值:
    • 如果您指定的是 Android,請將「值」設為:
      {"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. 調整遠端設定以接收即時更新

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

運作方式

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

導入即時遠端設定

為了說明這項做法在遊戲中的運作方式,請對程式碼進行下列變更。

建立 Config Update 處理常式

使用 Config Update 事件的第一步,就是建立能監聽該事件的方法。在 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.");
         });
   }

此方法會在啟用新值時,在記錄中列印更新鍵的清單和成功訊息。

訂閱更新事件

如要在呼叫事件時啟用 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. 如果記錄訊息的開頭是「監聽錯誤」讀取其餘部分,並嘗試針對顯示的錯誤訊息進行偵錯。
  3. 如果記錄開頭為「更新的鍵」,您的應用程式接收到更新的值。
  4. 如果上述兩種方法皆無效,請仔細檢查其餘記錄,然後重新查看建立 Config Update 處理常式中的指示,然後重新測試並重新檢查這些記錄,確認是否有任何問題。

12. 恭喜!

您已使用遠端設定功能,在應用程式中擷取遊戲內價值,並使用條件提供不同的變化版本,藉此從遠端控制遊戲內價值!

涵蓋內容

  • 如何設定及擷取遠端設定值
  • 如何檢測 Unity C# 程式碼,以使用擷取的值
  • 如何以 JSON 值儲存、檢測及覆寫複合值/物件
  • 如何使用遠端設定條件提供不同的值變化版本

後續步驟

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