1. บทนำ
คุณสามารถใช้การกำหนดค่าระยะไกลของ Firebase เพื่อกำหนดคู่คีย์-ค่าหรือที่เรียกว่าพารามิเตอร์ในแอปและอัปเดตค่าในระบบคลาวด์ ซึ่งช่วยให้คุณแก้ไขรูปลักษณ์และลักษณะการทำงานของแอปได้โดยไม่ต้องเผยแพร่การอัปเดตแอป
คุณจะเพิ่มฟังก์ชันใหม่นี้ลงในเกมตัวอย่าง MechaHamster: เลื่อนระดับด้วย Firebase Edition เกมตัวอย่างนี้คือเกม Firebase คลาสสิกใหม่อย่าง MechaHamster ที่นำฟังก์ชันส่วนใหญ่ของ Firebase ที่มีมาในตัวออก ทำให้คุณมีโอกาสนำเอา Firebase มาใช้ในรูปแบบใหม่ๆ แทนที่ได้
เพื่อให้มั่นใจว่าแอปทำงานตามที่ต้องการ คุณจะต้องตั้งการกำหนดค่าเริ่มต้นสำหรับค่าต่างๆ ในโค้ดเกมตัวอย่าง แล้วค่าเหล่านี้สามารถลบล้างได้ด้วยค่าที่คุณกำหนดไว้ในการกำหนดค่าระยะไกลในคอนโซล Firebase
สิ่งที่คุณจะได้เรียนรู้
- วิธีตั้งค่าการกำหนดค่าระยะไกลในระบบคลาวด์และเรียกข้อมูล
- วิธีใช้โค้ด Unity C# เพื่อใช้ค่าที่ดึงมาโดยอัตโนมัติ
- วิธีจัดเก็บ วัด และแทนที่ค่า/วัตถุผสมเป็นค่า JSON
- วิธีใช้เงื่อนไขการกำหนดค่าระยะไกลเพื่อแสดงตัวแปรค่าที่แตกต่างกันต่อกลุ่มผู้ใช้ต่างๆ
สิ่งที่ต้องมี
- Unity 2019.1.0f1 ขึ้นไปที่รองรับบิลด์ของ iOS และ/หรือ Android
- อุปกรณ์ Android/iOS หรืออุปกรณ์จำลอง/โปรแกรมจำลองสำหรับสร้างและใช้งานเกม
2. ตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์
ส่วนต่อไปนี้จะอธิบายวิธีดาวน์โหลดโค้ด Level Up ด้วย Firebase เปิดโค้ดใน Unity และเพิ่มโปรเจ็กต์ Firebase Firebase + Unity Codelab อื่นๆ ใช้เกมตัวอย่างเลเวลอัปนี้ด้วย Firebase อยู่แล้ว คุณจึงอาจทำงานในส่วนนี้เสร็จสมบูรณ หากใช่ ให้ข้ามขั้นตอนเหล่านี้และดำเนินการเพิ่ม Firebase SDK สำหรับ Unity เพื่อเพิ่มการกำหนดค่าระยะไกลลงในโค้ดเกมตัวอย่าง
ดาวน์โหลดโค้ด
โคลนที่เก็บ GitHub ของ Codelab นี้จากบรรทัดคำสั่ง
git clone https://github.com/firebase/level-up-with-firebase
หรือหากยังไม่ได้ติดตั้ง Git ให้ดาวน์โหลดที่เก็บเป็นไฟล์ ZIP
เปิด Level Up ด้วย Firebase ในตัวแก้ไข Unity
- เปิด Unity Hub แล้วคลิกลูกศรแบบเลื่อนลงถัดจากเปิดจากแท็บโปรเจ็กต์
- คลิกเพิ่มโปรเจ็กต์จากดิสก์
- ไปที่ไดเรกทอรีที่มีโค้ด แล้วคลิกตกลง
- หากได้รับข้อความแจ้ง ให้เลือกเวอร์ชันตัวแก้ไข Unity ที่จะใช้และแพลตฟอร์มเป้าหมาย (Android หรือ iOS)
- คลิกที่ชื่อโปรเจ็กต์ level-up-with-firebase แล้วโปรเจ็กต์จะเปิดขึ้นในตัวแก้ไข Unity
- หากเครื่องมือแก้ไขไม่เปิดโดยอัตโนมัติ ให้เปิด
MainGameScene
ในเนื้อหา > Hamster ในแท็บโปรเจ็กต์ของ Unity Editor
ดูข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการใช้ Unity ได้ที่การทำงานใน Unity
3. เพิ่ม Firebase ไปยังโปรเจ็กต์ Unity
สร้างโปรเจ็กต์ Firebase
- ในคอนโซล Firebase ให้คลิกเพิ่มโปรเจ็กต์
- หากต้องการสร้างโปรเจ็กต์ใหม่ ให้ป้อนชื่อโปรเจ็กต์ที่ต้องการ
การดำเนินการนี้ยังจะตั้งค่ารหัสโปรเจ็กต์ (แสดงอยู่ใต้ชื่อโปรเจ็กต์) ตามชื่อโปรเจ็กต์ด้วย หรือคุณจะคลิกไอคอนแก้ไขบนรหัสโปรเจ็กต์เพื่อปรับแต่งเพิ่มเติมก็ได้ - หากได้รับข้อความแจ้ง ให้ตรวจสอบและยอมรับข้อกำหนดของ Firebase
- คลิกต่อไป
- เลือกตัวเลือกเปิดใช้ Google Analytics สำหรับโปรเจ็กต์นี้ แล้วคลิกต่อไป
- เลือกบัญชี Google Analytics ที่มีอยู่เพื่อใช้ หรือเลือกสร้างบัญชีใหม่เพื่อสร้างบัญชีใหม่
- คลิกสร้างโครงการ
- เมื่อสร้างโปรเจ็กต์แล้ว ให้คลิกต่อไป
ลงทะเบียนแอปด้วย Firebase
- เปิดคอนโซล Firebase แล้วคลิกไอคอน Unity จากตรงกลางหน้าภาพรวมของโปรเจ็กต์เพื่อเปิดเวิร์กโฟลว์การตั้งค่า หรือหากคุณเพิ่มแอปไปยังโปรเจ็กต์ Firebase แล้ว ให้คลิกเพิ่มแอปเพื่อแสดงตัวเลือกแพลตฟอร์ม
- เลือกเพื่อลงทะเบียนเป้าหมายบิลด์ของทั้ง Apple (iOS) และ Android
- ป้อนรหัสเฉพาะแพลตฟอร์มของโปรเจ็กต์ Unity สำหรับ Codelab นี้ ให้ป้อนข้อมูลต่อไปนี้:
- สำหรับ Apple (iOS) - ป้อน
com.google.firebase.level-up
ในช่องรหัสชุด iOS - สำหรับ Android - ป้อน
com.google.firebase.level_up
ในช่องชื่อแพ็กเกจ Android
- สำหรับ Apple (iOS) - ป้อน
- ป้อนชื่อเล่นเฉพาะแพลตฟอร์มของโปรเจ็กต์ Unity(ไม่บังคับ)
- คลิกลงทะเบียนแอปและดำเนินการต่อในส่วนดาวน์โหลดไฟล์กำหนดค่า
- ทำซ้ำขั้นตอนสำหรับเป้าหมายบิลด์ที่คุณไม่ได้ทำในครั้งแรก
เพิ่มไฟล์การกำหนดค่า Firebase
หลังจากคลิกลงทะเบียนแอป คุณจะได้รับแจ้งให้ดาวน์โหลดไฟล์การกำหนดค่า 2 ไฟล์ (ไฟล์การกำหนดค่า 1 ไฟล์สำหรับเป้าหมายบิลด์แต่ละรายการ) โปรเจ็กต์ Unity ของคุณต้องใช้ข้อมูลเมตา Firebase ในไฟล์เหล่านี้เพื่อเชื่อมต่อกับ Firebase
- ดาวน์โหลดไฟล์กำหนดค่าที่ใช้ได้ทั้ง 2 ไฟล์:
- สําหรับ Apple (iOS): ดาวน์โหลด GoogleService-Info.plist
- สำหรับ Android: ดาวน์โหลด google-services.json
- เปิดหน้าต่าง Project ของโปรเจ็กต์ Unity จากนั้นย้ายไฟล์การกำหนดค่าทั้ง 2 ไฟล์ไปยังโฟลเดอร์ Assets
- กลับไปที่คอนโซล Firebase ในขั้นตอนการตั้งค่า ให้คลิกถัดไป แล้วเพิ่ม Firebase SDK สำหรับ Unity
หมายเหตุ: คุณสามารถดาวน์โหลดไฟล์เหล่านี้อีกครั้งในภายหลังได้เสมอโดยเปิดการตั้งค่าทั่วไปของโครงการ เลื่อนลงไปที่ส่วนแอปของคุณ แล้วคลิกปุ่มดาวน์โหลดสำหรับไฟล์การกำหนดค่าที่ต้องการ
เพิ่ม Firebase SDK สำหรับ Unity
- คลิกดาวน์โหลด Firebase Unity SDK ในคอนโซล Firebase
- แตกไฟล์ SDK ในจุดที่สะดวกสบาย
- ในโปรเจ็กต์ Unity แบบเปิด ให้ไปที่เนื้อหา > นำเข้าแพ็กเกจ > แพ็กเกจที่กำหนดเอง
- ในกล่องโต้ตอบนำเข้าแพ็กเกจ ให้ไปที่ไดเรกทอรีที่มี SDK ที่แยกไฟล์แล้ว เลือก
FirebaseAnalytics.unitypackage
แล้วคลิกเปิด - จากกล่องโต้ตอบนำเข้าแพ็กเกจ Unity ที่ปรากฏขึ้น ให้คลิกนำเข้า
- ทำซ้ำขั้นตอนก่อนหน้าเพื่อนำเข้าแพ็กเกจสองแพ็กเกจต่อไปนี้:
FirebaseRemoteConfig.unitypackage
FirebaseCrashlytics.unitypackage
Crashlytics เป็นรายงานข้อขัดข้องแบบเรียลไทม์ที่ใช้งานง่าย ซึ่งช่วยให้คุณติดตาม จัดลำดับความสำคัญ และแก้ไขปัญหาด้านความเสถียรที่ทำให้แอปมีคุณภาพลดลง หากคุณไม่เคยใช้โปรแกรมดังกล่าวมาก่อน โปรดลองทำตาม Crashlytics Learning Pathway for Unity ให้เสร็จสมบูรณ์
- กลับไปที่คอนโซล Firebase แล้วคลิกถัดไปในเวิร์กโฟลว์การตั้งค่า
ดูข้อมูลเพิ่มเติมเกี่ยวกับการเพิ่ม Firebase SDK ไปยังโปรเจ็กต์ Unity ได้ที่ตัวเลือกการติดตั้ง Unity เพิ่มเติม
4. ตั้งค่าเริ่มต้นของการกำหนดค่าระยะไกลและดึงข้อมูลค่าใหม่
ใน Codelab นี้ คุณจะอัปเดตออบเจ็กต์ที่ใช้ค่าที่กำหนดไว้ในโค้ดหรือได้รับการทำให้เป็นอนุกรมในตัวแก้ไข Unity ให้ใช้ค่าที่มีการควบคุมด้วยการกำหนดค่าระยะไกล คุณจะต้องกำหนดค่าเริ่มต้นสำหรับแต่ละพารามิเตอร์โดยใช้ SetDefaultsAsync
เพื่อให้แอปทำงานตามที่ต้องการก่อนที่จะเชื่อมต่อกับแบ็กเอนด์ของการกำหนดค่าระยะไกล แอปของคุณจะเป็นเวอร์ชันล่าสุดอยู่เสมอโดยการดึงข้อมูลค่าใหม่จากการกำหนดค่าระยะไกล และเปิดใช้งานค่าเหล่านั้นในโค้ด
หากต้องการดึงค่าใหม่จากการกำหนดค่าระยะไกล มีวิธีการที่ยังไม่ได้ใช้จำนวนหนึ่งซึ่งไฟล์ Assets/Hamster/Scripts/MainGame.cs
ต้องดำเนินการให้เสร็จอยู่แล้ว
- เพิ่มคำสั่ง
using
ต่อไปนี้ในMainGame.cs
: โมดูลusing Firebase.Crashlytics; using Firebase.Extensions; using Firebase.RemoteConfig;
Firebase.Extensions
มีส่วนขยายบางรายการของ C# Tasks API ซึ่งจะช่วยให้จัดการกระบวนการเริ่มต้นด้วย Callback ได้ง่ายขึ้น - เพิ่มการเริ่มต้น Firebase ลงในเมธอด
MainGame.cs
Start()
โดยแทนที่เมธอด InitializeCommonDataAndStartGame() ที่มีอยู่ด้วยเมธอดInitializeFirebaseAndStartGame()
ที่ยังไม่ได้ใช้ในปัจจุบัน: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
ที่มีอยู่ให้เสร็จสมบูรณ์ การดำเนินการนี้จะเชื่อมโยงการเรียกใช้ไปยังเมธอดของการกำหนดค่าระยะไกล FetchAsync
(ซึ่งดึงค่าใหม่จากการกำหนดค่าระยะไกล) และ ActivateAsync
(ซึ่งจะเปิดใช้งานค่าที่ได้รับเหล่านั้นเพื่อให้พร้อมใช้งานในโค้ด) โดยใช้พารามิเตอร์ Callback ที่ชื่อ onFetchAndActivateSuccessful
รหัสการเริ่มต้นใช้งานที่เราเพิ่มในขั้นตอนก่อนหน้าจะเรียก FetchRemoteConfig
โดยมี InitializeCommonDataAndStartGame
เป็น Callback เพื่อเริ่มเกมในตอนท้ายของลำดับ คุณสามารถส่ง Callback สำรองไปยัง 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
ให้เสร็จสมบูรณ์ ซึ่งจะได้รับการ CallbackonFetchAndActivateSuccessful
ที่ผ่านไป เมื่อการเปิดใช้งานเสร็จสิ้น ระบบจะเรียกใช้ Callback ที่ระบุ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. กำหนดกลยุทธ์การโหลดการกำหนดค่าระยะไกล
หากต้องการดึงข้อมูลและเปิดใช้งานค่าในเวลาอื่นระหว่างการใช้แอป คุณจะต้องเรียกใช้ฟังก์ชันเหล่านี้อีกครั้ง และหากมีออบเจ็กต์ใดแคชค่าไว้ จะต้องแจ้งให้อัปเดตด้วย โปรดพิจารณาเวลาที่ต้องใช้ค่าใหม่และเวลาที่ควรเริ่มการดึงข้อมูลและเปิดใช้งานค่าใหม่เพื่อไม่ให้มีการเปลี่ยนแปลงขณะใช้งาน เพื่อพัฒนากลยุทธ์ในการดึงข้อมูลค่าการกำหนดค่าระยะไกลอีกครั้ง
ระบบจะดึงข้อมูลและเปิดใช้งานค่าการกำหนดค่าระยะไกลเมื่อแอปเริ่มทำงานเหมือนที่ทำอยู่ในปัจจุบัน ขณะเปลี่ยนเมนู คุณสามารถซ่อนการดึงข้อมูลขณะเปลี่ยนเมนู ขณะเดียวกันก็บล็อกการโต้ตอบระหว่างการเปลี่ยนด้วย นอกจากนี้ ซึ่งมักเป็นเวลาที่เกี่ยวข้องมากที่สุดในการรับค่าใหม่ เนื่องจากการเปลี่ยนแปลงสถานะเมนูมักจะใช้ในการทราบว่า "where" ผู้เล่นจะเล่นเกมและคาดการณ์ว่าจะมีการใช้ค่า
เมื่อดูในระบบเมนูของ Mechahamster วิธีที่ง่ายที่สุดในการเพิ่มการรีเฟรชเมนูการบล็อก UI คือการเรียกใช้ก่อนที่เมนูหลักจะกลับมาทำงานอีกครั้ง (โดยเฉพาะเมื่อเข้าถึงโดยสำรองข้อมูลจากเมนูอื่น) และส่งวิธีการแสดง UI เป็น Callback 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 ในตัวแก้ไข บันทึกจะปรากฏในแท็บคอนโซล
- สร้างและเรียกใช้แอปอีกครั้ง (ใน Editor โดยใช้อุปกรณ์หรือเครื่องจำลอง)
- หลังจากที่เมนูหลักของเกมปรากฏขึ้น ให้ตรวจสอบผลลัพธ์การบันทึกของเกม ซึ่งควรมีบันทึกที่สร้างโดย
Debug.Log
ในFetchRemoteConfig
และActivateRetrievedRemoteConfigValues
ซึ่งควรแสดงเป็น "กำลังดึงข้อมูล..." และ "โหลดข้อมูลระยะไกลแล้วและพร้อม" ข้อความ จดการประทับเวลาไว้ที่ตอนต้นของข้อความเหล่านี้ - กดใบอนุญาตในเกม
- กดตกลง
- รอให้เมนูหลักของเกมปรากฏขึ้น
- ตรวจสอบเอาต์พุตบันทึกของเกม ซึ่งควรคล้ายกับข้อมูลในขั้นตอนก่อนหน้า โดยมีการประทับเวลาใหม่ (เวลาตรงกับเวลาที่ตั้งไว้ในนาฬิการะบบที่คุณใช้เล่นเกม)
- กดเล่นในเกม
- กด Let's Roll
- นำทางลูกบอลไปยังเป้าหมายโดยใช้ลูกศรบนแป้นพิมพ์ซึ่งจะเปิดเมนูระดับเสร็จสมบูรณ์
- กด Levels
- รอให้เมนูเลือกระดับโหลดขึ้นมา
- ตรวจสอบเอาต์พุตบันทึกของเกมอีกครั้ง ซึ่งควรตรงกับข้อความในบันทึกจากขั้นตอนก่อนหน้านี้ และมีการประทับเวลาที่ใหม่กว่า (ตรงกับเวลาที่ตั้งไว้ในนาฬิกาของระบบที่คุณกำลังเล่นเกม)
หากส่วนใดเหตุการณ์หนึ่งไม่ปรากฏในแอป แสดงว่าบางส่วนของขั้นตอนการดึงข้อมูลและเปิดใช้งาน (หรืออุปกรณ์) อาจกำหนดค่าไม่ถูกต้อง หากบันทึกแรกไม่ปรากฏขึ้น อาจเป็นไปได้ว่าเกมของคุณไม่เริ่มต้น ดูคำเตือนและข้อผิดพลาดเกี่ยวกับโปรเจ็กต์/สภาพแวดล้อมแล้วตรวจสอบในคอนโซล Editor หรือบันทึกของอุปกรณ์/โปรแกรมจำลอง แล้วปัญหานี้อาจเป็นเรื่องง่ายเหมือนกับการเชื่อมต่ออินเทอร์เน็ต
หากบันทึกเริ่มต้นจากการโหลดเมนูปรากฏขึ้น แต่หนึ่งในบันทึกหลังจากนั้นไม่ปรากฏขึ้น ให้ตรวจสอบ/ใช้เมธอด Resume
ใหม่ใน Assets/Hamster/Scripts/States/MainMenu.cs
และ Assets/Hamster/Scripts/States/BaseLevelSelect.cs
8. ใช้โค้ดเป็นเครื่องมือ
คุณได้กําหนดค่าพารามิเตอร์ในแอปใน SetDefaultsAsync()
และทําให้เวอร์ชันล่าสุดใช้ได้กับ FetchAsync()
และ ActivateAsync()
แล้ว คุณจะอ้างอิงและใช้ค่าเหล่านั้นในโค้ดได้
หลังจากที่คุณกำหนดค่าในแบ็กเอนด์การกำหนดค่าระยะไกลแล้ว ให้ดึงข้อมูลแล้วเปิดใช้งาน (หรือทำทั้ง 2 อย่างพร้อมกัน) ค่าเหล่านั้นจะพร้อมใช้งานสำหรับแอปของคุณ หากต้องการใช้ค่าเหล่านี้ ให้เรียก GetValue(string key)
แล้วเลือกคีย์พารามิเตอร์เป็นอาร์กิวเมนต์ การดำเนินการนี้จะแสดงผล ConfigValue
ซึ่งมีพร็อพเพอร์ตี้สำหรับเข้าถึงค่าเป็นประเภทต่างๆ ที่รองรับ ได้แก่ string
, bool
, long
, double
ในโปรเจ็กต์นี้และกรณีการใช้งานเกมส่วนใหญ่ คุณต้องแคสต์ 2 ประเภทสุดท้ายเป็น int
และ float
ที่มีสำนวนมากกว่า โปรดตรวจสอบว่าค่าเริ่มต้นที่ตั้งไว้ในการกำหนดค่าระยะไกลอยู่ในช่วงที่ถูกต้องของประเภทที่คุณจะใช้ในโค้ดของแอป เพื่อให้มั่นใจว่า Conversion เหล่านี้จะไม่ทำให้เกิดปัญหา
- นำเข้าการกำหนดค่าระยะไกลโดยเพิ่ม
using Firebase.RemoteConfig;
ไว้ที่ด้านบนของไฟล์ต่อไปนี้Assets/Hamster/Scripts/States/MainMenu.cs
Assets/Hamster/Scripts/MapObjects/AccelerationTile.cs
- แทนที่เมธอด
Start
ของAccelerationTile.cs
: การเปลี่ยนแปลงนี้จะทำให้จำนวนแรงที่ส่งต่อโดยการ์ดการเร่งจะเปลี่ยนเป็น 1 ที่ได้รับจากการกำหนดค่าระยะไกลprivate void Start() { var remoteConfig = FirebaseRemoteConfig.DefaultInstance; Acceleration = (float)remoteConfig.GetValue(AccelerationTileForceKey).DoubleValue; }
- แก้ไขเนื้อหาของเมธอด
InitializeUI
ของMainMenu.cs
: ในตัวอย่างนี้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. ตั้งค่าค่าพารามิเตอร์จากระยะไกล
เนื่องจากแอปมีการติดตั้งเครื่องมือโดยสมบูรณ์แล้ว คุณก็พร้อมจะกำหนดค่าพารามิเตอร์และค่าในเซิร์ฟเวอร์การกำหนดค่าระยะไกลแล้ว ใน Codelab นี้ เราจะตั้งค่านี้โดยใช้คอนโซล Firebase
- เปิดโปรเจ็กต์ในคอนโซล Firebase
- เลือกการกำหนดค่าระยะไกลจากเมนูเพื่อดูแดชบอร์ดการกำหนดค่าระยะไกล
- สําหรับพารามิเตอร์แต่ละรายการที่คุณกําหนดไว้ในแอปและแสดงในตารางที่ตามมา ให้คลิกเพิ่มพารามิเตอร์ วางชื่อพารามิเตอร์ (คีย์) เลือกประเภทข้อมูลที่แสดงในตาราง ปิดใช้ใช้ค่าเริ่มต้นในแอป แล้ววางค่าเริ่มต้นใหม่
ชื่อพารามิเตอร์ (คีย์)
ประเภทข้อมูล
ค่าเริ่มต้น
การเร่งความเร็วไทล์
ตัวเลข
100
การแทนที่คำบรรยาย
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" หากคุณกำหนดเป้าหมายไปที่ iOS หรือ "คือ Android" หากคุณกำหนดเป้าหมายเป็น Android หากคุณกำหนดเป้าหมายทั้ง 2 แบบ เพียงเลือกกลุ่มเป้าหมายที่นี่และนำไปใช้กับส่วนอื่นๆ ของ Codelab
- ภายใต้ใช้หาก... ให้คลิกเมนูแบบเลื่อนลงเลือก... แล้วเลือกแพลตฟอร์ม จากนั้นเลือกแพลตฟอร์มที่เหมาะสม
- คลิกสร้างเงื่อนไขเพื่อสร้างเงื่อนไข กล่องโต้ตอบแก้ไขพารามิเตอร์จะปรากฏขึ้นอีกครั้ง และคุณสามารถกำหนดค่าต่อไปนี้ได้
- หากคุณกำหนดเป้าหมายเป็น 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}}
- หากคุณกำหนดเป้าหมายเป็น Android ให้ตั้งค่าเป็น
- คลิกบันทึกเพื่อบันทึกการเปลี่ยนแปลง
- คลิกเผยแพร่เพื่อเผยแพร่การกำหนดค่าใหม่และทำให้ค่าใหม่พร้อมใช้งานในเกม
หากคุณสร้างและใช้งานเกมอีกครั้ง คุณจะเห็นการแทนที่คำบรรยายของเกมด้วยตัวแปรเฉพาะแพลตฟอร์ม
11. กำหนดค่าการกำหนดค่าระยะไกลเพื่อรับข้อมูลอัปเดตแบบเรียลไทม์
การกำหนดค่าระยะไกลฟังและจัดการการอัปเดตเทมเพลตการกำหนดค่าระยะไกลแบบเรียลไทม์ได้แล้ว แอปต่างๆ สามารถสมัครใช้ Remote Config API แบบเรียลไทม์ใหม่เพื่อฟังการเปลี่ยนแปลงการกำหนดค่าและค่าที่อัปเดต
วิธีการทำงาน
หากต้องการฟังข้อมูลอัปเดต แอปของคุณต้องใช้เมธอดที่สมัครรับข้อมูลเหตุการณ์ OnConfigUpdateListener
ขณะที่ Listener การอัปเดตการกำหนดค่าอย่างน้อย 1 รายการสมัครรับข้อมูลอยู่ ระบบจะดึงข้อมูลเทมเพลตการกำหนดค่าระยะไกลใหม่โดยอัตโนมัติ โดยจะมีการเรียกใช้เครื่องจัดการที่สมัครใช้บริการและใช้เพื่อดำเนินการตรรกะในการตอบสนองได้ เช่น การเปิดใช้งานค่าใหม่และทำให้ค่าดังกล่าวพร้อมใช้งานในส่วนที่เหลือของแอปพลิเคชัน
ใช้การกำหนดค่าระยะไกลแบบเรียลไทม์
เพื่อสาธิตวิธีการทำงานของวิธีนี้ในเกม ให้ทำการเปลี่ยนแปลงต่อไปนี้ในโค้ดของคุณ
สร้างเครื่องจัดการการอัปเดตการกำหนดค่า
ขั้นตอนแรกในการใช้เหตุการณ์ 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
เมื่อมีการเรียกกิจกรรม ให้สมัครรับข้อมูลกิจกรรม แทนที่เมธอด InitializeCommonDataAndStartGame()
ใน Assets/Hamster/Scripts/MainGame.cs
ด้วยเมธอดต่อไปนี้
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;
) จะสมัครรับข้อมูลเครื่องจัดการเหตุการณ์กับเหตุการณ์
ยกเลิกการสมัครเมื่อออบเจ็กต์ที่เป็นเจ้าของของตัวแฮนเดิลถูกทำลาย
เพื่อป้องกันข้อผิดพลาดการอ้างอิงแบบ Null ออบเจ็กต์ที่มีเมธอดที่สมัครรับกับเหตุการณ์จะต้องยกเลิกการสมัครใช้บริการเมธอดนั้นเมื่อถูกทำลาย เพิ่มเมธอดต่อไปนี้ใน Assets/Hamster/Scripts/MainGame.cs
:
private void OnDestroy()
{
FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener -= ActivateValuesOnConfigUpdate;
}
ทดสอบฟังก์ชันการทำงานใหม่
หากต้องการตรวจสอบฟังก์ชันการทำงานใหม่ ให้ลองใช้แอปที่คุณสร้างขึ้น ขั้นตอนต่อไปนี้กำหนดให้คุณต้องอ่านบันทึกและแก้ไขข้อบกพร่องโดยใช้อุปกรณ์จริง
เปลี่ยนacceleration_tile_force
และสังเกตการณ์
หลังจากเริ่มต้นแอปแล้ว ในส่วนการกำหนดค่าระยะไกลของคอนโซล Firebase ให้ทำดังนี้
- กดปุ่มแก้ไขถัดจาก
acceleration_tile_force
- เปลี่ยนค่าเป็น "120" แล้วกดบันทึก
- คลิกปุ่มเผยแพร่การเปลี่ยนแปลง
- ตรวจสอบบันทึก
- หากคุณเห็นข้อความบันทึกที่ขึ้นต้นด้วย "เกิดข้อผิดพลาดขณะฟัง" อ่านส่วนที่เหลือแล้วลองแก้ไขข้อบกพร่องที่มีข้อความแสดงข้อผิดพลาดที่แสดงขึ้น
- หากคุณเห็นบันทึกที่ขึ้นต้นด้วย "คีย์ที่อัปเดต" แอปของคุณได้รับค่าที่มีการเปลี่ยนแปลง
- หากไม่เห็นทั้ง 2 อย่างนี้ ให้ดูบันทึกที่เหลือแล้วดูวิธีการจากสร้างเครื่องจัดการการอัปเดตการกำหนดค่าอีกครั้ง ทดสอบใหม่ และตรวจสอบบันทึกอีกครั้งเพื่อดูว่ามีข้อผิดพลาดอะไรไหม
12. ยินดีด้วย
คุณได้ใช้การกำหนดค่าระยะไกลเพื่อควบคุมค่าในเกมจากระยะไกลโดยการดึงข้อมูลค่าเหล่านั้นในแอปและใช้เงื่อนไขเพื่อแสดงตัวแปรต่างๆ
สรุปประเด็นที่ได้พูดถึง
- วิธีตั้งค่าและเรียกข้อมูลค่าการกำหนดค่าระยะไกล
- วิธีใช้โค้ด Unity C# เพื่อใช้ค่าที่ดึงมา
- วิธีจัดเก็บ วัด และแทนที่ค่า/วัตถุผสมเป็นค่า JSON
- วิธีใช้เงื่อนไขการกำหนดค่าระยะไกลเพื่อแสดงตัวแปรค่าที่แตกต่างกัน
ขั้นตอนถัดไป
อ่านเกี่ยวกับลำดับความสำคัญของค่าพารามิเตอร์เพื่อทำความเข้าใจตรรกะของค่าที่อินสแตนซ์ของแอปได้รับเมื่อใช้พารามิเตอร์ที่มีหลายค่า (เนื่องจากเงื่อนไขหรือย่าน) ได้ดียิ่งขึ้น