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」
- 啟動 Unity Hub,然後在「Projects」(專案) 分頁中,按一下「Open」(開啟) 旁邊的下拉式箭頭。
- 按一下「從磁碟新增專案」。
- 前往包含程式碼的目錄,然後按一下「確定」。
- 如果系統提示,請選取要使用的 Unity 編輯器版本和目標平台 (Android 或 iOS)。
- 按一下專案名稱「level-up-with-firebase」,專案就會在 Unity 編輯器中開啟。
- 如果編輯器未自動開啟,請在 Unity 編輯器的「Project」分頁中,依序開啟「Assets」 >「Hamster」,然後開啟
MainGameScene
。
如要進一步瞭解如何安裝及使用 Unity,請參閱「在 Unity 中工作」。
3. 將 Firebase 新增至 Unity 專案
建立 Firebase 專案
- 使用 Google 帳戶登入 Firebase 控制台。
- 按一下按鈕建立新專案,然後輸入專案名稱 (例如
LevelUpWithFirebase
)。
- 按一下「繼續」。
- 如果系統提示,請詳閱並接受 Firebase 條款,然後按一下「繼續」。
- (選用) 在 Firebase 控制台中啟用 AI 輔助功能 (稱為「Gemini in Firebase」)。
- 在本程式碼研究室中,您需要 Google Analytics 才能充分運用 Firebase 產品,因此請開啟 Google Analytics 選項的切換按鈕。按照畫面上的指示設定 Google Analytics。
- 按一下「建立專案」,等待專案佈建完成,然後按一下「繼續」。
向 Firebase 註冊應用程式
- 開啟 Firebase 控制台,然後在專案總覽頁面中間點選 Unity 圖示,啟動設定工作流程。如果已在 Firebase 專案中新增應用程式,請點選「新增應用程式」,顯示平台選項。
- 選取要同時註冊 Apple (iOS) 和 Android 版本目標。
- 輸入 Unity 專案的平台專屬 ID。在本程式碼研究室中,請輸入以下內容:
- 視需要輸入 Unity 專案的平台專屬暱稱。
- 按一下「註冊應用程式」,然後前往「下載設定檔」部分。
- 針對第一次未執行的建構目標重複執行這個程序。
新增 Firebase 設定檔
按一下「註冊應用程式」後,系統會提示您下載兩個設定檔 (每個建構目標各一個設定檔)。Unity 專案需要這些檔案中的 Firebase 中繼資料,才能連結至 Firebase。
- 下載兩個可用的設定檔:
- Apple (iOS):下載 GoogleService-Info.plist。
- Android:下載 google-services.json。
- 開啟 Unity 專案的「Project」視窗,然後將兩個設定檔都移入「Assets」資料夾。
- 返回 Firebase 主控台,在設定工作流程中點選「下一步」,然後繼續新增適用於 Unity 的 Firebase SDK。
注意:如要稍後重新下載這些檔案,請開啟專案的一般設定,向下捲動至「您的應用程式」部分,然後點選所需設定檔的下載按鈕。
新增 Firebase Unity SDK
- 在 Firebase 主控台中,按一下「下載 Firebase Unity SDK」。
- 將 SDK 解壓縮至方便使用的位置。
- 在開啟的 Unity 專案中,依序前往「Assets」 >「Import Package」 >「Custom Package」。
- 在「Import package」對話方塊中,前往包含已解壓縮 SDK 的目錄,選取
FirebaseAnalytics.unitypackage
,然後按一下「Open」。 - 在隨即顯示的「Import Unity Package」對話方塊中,按一下「Import」。
- 重複上述步驟,匯入下列兩個套件:
FirebaseRemoteConfig.unitypackage
FirebaseCrashlytics.unitypackage
Crashlytics 是一款輕巧的即時當機回報工具,可協助您追蹤穩定性問題、排定問題的優先順序並加以解決,避免應用程式品質受到影響。如果您先前未使用過,建議完成 Unity 適用的 Crashlytics 學習路徑。
- 返回 Firebase 控制台,然後在設定工作流程中按一下「下一步」。
如要進一步瞭解如何將 Firebase SDK 新增至 Unity 專案,請參閱「其他 Unity 安裝選項」。
4. 設定遠端設定預設值並擷取新值
在本程式碼研究室中,您將更新使用程式碼中定義的值或在 Unity 編輯器中序列化的物件,改為使用透過遠端設定插碼的值。您可以使用 SetDefaultsAsync
為每個參數設定預設值,確保應用程式在連線至遠端設定後端前能正常運作。應用程式會從遠端設定擷取新值並啟用,以便在程式碼中使用,確保應用程式保持在最新狀態。
如要從遠端設定擷取新值,Assets/Hamster/Scripts/MainGame.cs
檔案中已有許多未實作的方法,必須完成這些方法。
- 在
MainGame.cs
中新增下列using
陳述式:using Firebase.Crashlytics; using Firebase.Extensions; using Firebase.RemoteConfig;
Firebase.Extensions
模組包含 C# Tasks API 的一些擴充功能,可協助簡化使用回呼管理初始化程序的流程。 - 將現有的 InitializeCommonDataAndStartGame() 方法替換為目前未實作的方法
InitializeFirebaseAndStartGame()
,藉此將 Firebase 初始化作業新增至MainGame.cs
Start()
方法:void Start() { Screen.SetResolution(Screen.width / 2, Screen.height / 2, true); InitializeFirebaseAndStartGame(); }
- 在
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"); } }); }
- 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 選單的方法,這類選單取決於遠端設定值。這樣一來,系統只會在擷取並啟用這些值後,才會開啟選單。
- 將下列程式碼貼入
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); }); }
- 接著,完成
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 顯示畫面,直到 FetchAsync
和 ActivateAsync
完成為止:
- 開啟
Assets/Hamster/Scripts/States/MainMenu.cs
,並將現有的Resume
方法替換為下列程式碼:public override void Resume(StateExitValue results) { CommonData.mainGame.SelectAndPlayMusic(CommonData.prefabs.menuMusic, true); CommonData.mainGame.FetchRemoteConfig(InitializeUI); }
- 儲存檔案。
- 開啟
Assets/Hamster/Scripts/States/BaseLevelSelect.cs
,並將現有的Resume
方法替換為下列內容:public override void Resume(StateExitValue results) { CommonData.mainGame.FetchRemoteConfig(ShowUI); }
- 儲存檔案。
7. 偵錯/驗證擷取行為
此時建議進行診斷/驗證檢查。您可透過下列程序手動測試應用程式,以及應用程式擷取及啟用遠端設定值的方式/情況。
這項資訊會列印在模擬器、裝置或編輯器記錄中。如果是 iOS,您可以在 Xcode 中查看裝置和模擬器記錄。如為 Android,請執行 adb logcat
查看記錄。如果您在 Unity 中按下編輯器中的「Play」執行程式碼,記錄會顯示在「Console」分頁中。
- 重新建構並執行應用程式 (在編輯器中,使用裝置或模擬器)。
- 遊戲的「Main Menu」(主選單) 顯示後,請檢查遊戲的記錄輸出內容,其中應包含
FetchRemoteConfig
和ActivateRetrievedRemoteConfigValues
中Debug.Log
產生的記錄。這些訊息應會顯示「正在擷取資料...」和「已載入遠端資料,準備就緒」。請注意這些訊息開頭的時間戳記。 - 在遊戲中按下「授權」。
- 按一下「確定」。
- 等待遊戲顯示主選單。
- 查看遊戲的記錄輸出內容,應該會與上一個步驟的內容類似,但會顯示新的時間戳記 (與執行遊戲的系統時鐘所設定的時間相符)。
- 在遊戲中按下「Play」(播放)。
- 按下「Let's Roll」(快出擊吧!)。
- 使用鍵盤方向鍵將球移至球門,即可開啟「關卡完成」選單。
- 按下「音量」。
- 等待「關卡選擇」選單載入。
- 再次查看遊戲的記錄輸出內容。這應與先前步驟中的記錄訊息相符,但時間戳記較新 (與您執行遊戲的系統時鐘所設定的時間相符)。
如果應用程式中未顯示上述任一項目,表示擷取和啟用流程 (或裝置) 的部分設定可能錯誤。如果沒有顯示第一個記錄,遊戲可能無法啟動。查看編輯器控制台或裝置/模擬器記錄,瞭解專案/環境的警告和錯誤,並進行調查。問題可能很簡單,例如連上網際網路即可解決。
如果載入選單的初始記錄會顯示,但後續記錄不會顯示,請調查/重新實作 Assets/Hamster/Scripts/States/MainMenu.cs
和 Assets/Hamster/Scripts/States/BaseLevelSelect.cs
中的 Resume
方法。
8. 檢測程式碼
您已在 SetDefaultsAsync()
中設定應用程式內參數值,並透過 FetchAsync()
和 ActivateAsync()
提供最新版本,現在可以在程式碼中參照及使用這些值。
在遠端設定後端設定值後,請擷取並啟用這些值 (或同時執行這兩項操作),應用程式即可使用這些值。如要使用這些值,請呼叫 GetValue(string key)
,並選擇參數鍵做為引數。這會傳回 ConfigValue
,其中包含可做為各種支援型別存取值的屬性:string
、bool
、long
、double
。在這個專案和大多數遊戲用途中,您必須將最後兩種類型轉換為更慣用的 int
和 float
。為確保這些轉換不會造成問題,請確認在遠端設定中設定的初始值,位於您將在應用程式程式碼中使用的型別有效範圍內。
- 在下列檔案頂端新增
using Firebase.RemoteConfig;
,匯入遠端設定:Assets/Hamster/Scripts/States/MainMenu.cs
Assets/Hamster/Scripts/MapObjects/AccelerationTile.cs
- 取代
AccelerationTile.cs
的Start
方法: 這項變更生效後,加速度動態磚施加的力道會改為從遠端設定接收。private void Start() { var remoteConfig = FirebaseRemoteConfig.DefaultInstance; Acceleration = (float)remoteConfig.GetValue(AccelerationTileForceKey).DoubleValue; }
- 編輯
MainMenu.cs
的InitializeUI
方法主體: 在此,如果雲端中的所有欄位都設為類型預設值以外的值,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 控制台設定這項功能。
- 在 Firebase 控制台中開啟專案。
- 從選單中選取「遠端設定」,即可查看遠端設定主頁。
- 針對您在應用程式中定義並列於下表的每個參數,按一下「新增參數」,貼上參數名稱 (鍵),選取表格中列出的「資料類型」,停用「使用應用程式預設值」,然後貼上新的預設值:
參數名稱 (鍵)
資料類型
預設值
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}}
- 按一下 [儲存] 以儲存變更。
- 按一下「發布」,發布新設定並讓遊戲使用新值。
- 設定這些遠端參數後,請再次執行應用程式,並觀察這些參數如何覆寫原始預設值。
10. 使用遠端設定條件放送變體
您可以根據使用者的語言、所在位置、時段或使用的平台,量身打造應用程式體驗。遠端設定條件可讓您單獨或一併使用這些和其他屬性,向使用者提供不同的值 (稱為變體)。
條件的常見用途之一,是變更 iOS 和 Android 平台之間的內容。請按照下列步驟導入條件,根據使用的平台提供不同的 subtitle_override
值。
- 在 Firebase 控制台中開啟專案的「遠端設定」分頁。
- 按一下「
subtitle_override.
」的編輯按鈕 - 按一下左下角的「新增」。
- 在隨即顯示的下拉式選單中,將滑鼠游標懸停在「條件值」上,然後按一下「建立新條件」
。
- 系統出現提示時,請為條件命名,如果是指定 iOS,請命名為「is iOS」,如果是指定 Android,請命名為「is Android」。如果您同時指定這兩者,請在此選擇其中一個,並在程式碼研究室的其餘部分使用。
- 在「適用於」下方,按一下「選取...」下拉式選單,然後選取「平台」。然後選取合適的平台。
- 按一下「建立條件」來建立條件。「編輯參數」對話方塊會再次顯示,您現在可以設定值:
- 如果您指定 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}}
- 如果您指定 Android,請將「Value」設為:
- 按一下 [儲存] 以儲存變更。
- 按一下「發布」,發布新設定並讓遊戲使用新值。
再次建構及執行遊戲時,您應該會看到遊戲的副標題已替換為平台專屬的變體。
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 控制台的遠端設定部分中:
- 按下「
acceleration_tile_force
」旁的編輯按鈕。
- 將值變更為「120」,然後按下「儲存」。
- 按一下「發布變更」按鈕。
- 檢查記錄。
- 如果看到以「Error occurred while listening」開頭的記錄訊息,請閱讀其餘部分,並嘗試使用該訊息列印的錯誤訊息進行偵錯。
- 如果看到以「Updated keys」開頭的記錄,表示應用程式已收到變更的值。
- 如果兩者皆未顯示,請查看其餘記錄,然後重新檢閱「建立設定更新處理常式」中的操作說明、重新測試,並重新檢查記錄,判斷是否有任何問題。
12. 恭喜!
您已使用遠端設定,在應用程式中擷取遊戲內值,並使用條件提供不同變體,從遠端控制這些值!
涵蓋內容
- 如何設定及擷取遠端設定值
- 如何使用擷取的值來檢測 Unity C# 程式碼
- 如何以 JSON 值形式儲存、檢測及覆寫複合值/物件
- 如何使用遠端設定條件,放送不同的值變體
後續步驟
請參閱參數值優先順序,進一步瞭解應用程式執行個體使用具有多個值的參數 (因條件或地區而異) 時,會取得哪些值的邏輯。