Komponen Pengaturan jarak jauh
Pengujian Pengaturan Jarak Jauh

skrip Pengaturan jarak jauh

Note: sekarang tersedia sebagai preview packageA preview* paket dalam pengembangan dan belum siap untuk produksi. Paket dalam pratinjau mungkin ada tahap perkembangan, dari tahap awal hingga penyelesaian dekat.
Lihat di Glossary. Remote Config adalah penawaran yang ditingkatkan yang memungkinkan Anda untuk mengubah perilaku dan penampilan permainan Anda tanpa memerlukan biner baru. Anda dapat mengaktifkan atau menonaktifkan fitur, mengubah spesifikasi permainan Anda untuk menargetkan audiens tertentu, atau menjalankan acara khusus dengan menjadwalkan rilis konten baru. Sitemap

Gunakan kelas Unity Scripting API RemoteSettings untuk mengakses pengaturan jarak jauh Anda dalam kode. Kelas RemoteSettings menyediakan fungsi untuk mengakses pengaturan jarak jauh Anda, seperti RemoteSettings.GetString(), serta acara yang dapat Anda gunakan untuk memicu fungsi ketika pengaturan Anda dipetik atau diperbarui.

Event Purpose
BeforeFetchFromServer Dihentikan segera sebelum kelas RemoteSettings membuat permintaan jaringan untuk mengambil pengaturan jarak jauh Anda.
Completed Dihentikan ketika permintaan jaringan selesai. Completed selalu dikirim, bahkan ketika permintaan jaringan gagal dan ketika tidak ada perubahan pada pengaturan jarak jauh. Anda dapat menggunakan kode serverResponse yang dikirimkan ke fungsi delegasi Anda untuk menentukan apakah permintaan berhasil atau gagal. Parameter mengandung salah satu kode respons HTTP standar, seperti 200 untuk keberhasilan.
Updated Dispatuh setelah permintaan jaringan selesai berhasil, tetapi HANYA ketika pengaturan jarak jauh Anda telah berubah sejak pemeriksaan sebelumnya.

Catatan: Sebelum Unity 2018.1, peristiwa Updated selalu dikirim, bahkan ketika tidak ada perubahan pengaturan. Jika Anda mengandalkan fungsi delegasi untuk menerapkan pengaturan dalam permainan Anda apakah atau tidak ada perubahan, Anda harus menggunakan acara Completed daripada peristiwa Updated.

Anda harus mendaftarkan fungsi handler Anda untuk acara-acara ini mungkin selama peluncuran aplikasi, seperti pada fungsi Awake() dari MonoBehaviour dimuat dalam Unity pertama Anda sceneAdegan berisi lingkungan dan menu permainan Anda. Pikirkan setiap file Adegan unik sebagai tingkat yang unik. Di setiap Adegan, Anda menempatkan lingkungan, hambatan, dan dekorasi, pada dasarnya merancang dan membangun permainan Anda dalam potongan-potongan. More info
Lihat di Glossary
.

Karena mengambil pengaturan membutuhkan objek transaksi jaringan, objek RemoteSettings mengirimkan peristiwanya secara serentak. Fungsi handler Anda mungkin tidak disebut dalam urutan yang sama relatif terhadap peristiwa lain pada setiap platform atau bahkan pada setiap peluncuran platform yang sama. Selalu menginisialisasi variabel konfigurasi Anda dengan nilai-nilai default yang wajar, dan memungkinkan kemungkinan bahwa penuntut acara Anda dapat disebut pada waktu yang berbeda selama startup aplikasi.

Code example

Contoh berikut menunjukkan sebuah kelas yang menentukan sejumlah properti untuk tuning kesulitan permainan dan memperbarui properti ini berdasarkan pengaturan jarak jauh:

using UnityEngine;

public class RemoteTuningVariables : MonoBehaviour {

    public float DefaultSpawnRateFactor = 1.0f;
    public float DefaultEnemySpeedFactor = 1.0f;
    public float DefaultEnemyStrengthFactor = 1.0f;
    public static float SpawnRateFactor{ get; private set; }
    public static float EnemySpeedFactor{ get; private set; }
    public static float EnemyStrengthFactor{ get; private set; }

    void Start () {
        SpawnRateFactor = DefaultSpawnRateFactor;
        EnemySpeedFactor = DefaultEnemySpeedFactor;
        EnemyStrengthFactor = DefaultEnemyStrengthFactor;

        RemoteSettings.Completed += HandleRemoteSettings;
    }

    private void HandleRemoteSettings(bool wasUpdatedFromServer, bool settingsChanged, int serverResponse){
        SpawnRateFactor 
            = RemoteSettings.GetFloat ("SpawnRateFactor", DefaultSpawnRateFactor);
        EnemySpeedFactor
            = RemoteSettings.GetFloat ("EnemySpeedFactor", DefaultEnemySpeedFactor);
        EnemyStrengthFactor 
            = RemoteSettings.GetFloat ("EnemyStrengthFactor", DefaultEnemyStrengthFactor);
    }
} 

Perhatikan bahwa kelas menyediakan nilai default dalam panggilan metode RemoteSettings.GetFloat(). Jika objek RemoteSettings tidak dapat menemukan kunci yang ditentukan (jika Anda melewatkan nama kunci, misalnya), maka metode masih menetapkan nilai default Anda ke variabel tuning. Jika tidak, metode GetFloat() dan GetInt() menetapkan nol ke angka, GetString() menetapkan string kosong untuk string, dan GetBool() menetapkan salah untuk variabel boolean.

Kelas ini juga menetapkan nilai default yang sama dengan properti dalam metode Start() dalam kasus kelas lain mengakses pengaturan sebelum pengaturan jarak jauh dipetik dan tidak sebelumnya konfigurasi cache tersedia secara lokal. Menetapkan nilai default dalam metode Start() memastikan bahwa sifat selalu memiliki nilai yang wajar.

Memastikan konsistensi pengaturan

Jika Anda memiliki beberapa kelas dalam permainan Anda yang mengakses pengaturan jarak jauh pada waktu yang berbeda, dimungkinkan bahwa beberapa objek akan mengakses pengaturan Anda sebelum permintaan jaringan asinkron melengkapi dan beberapa akan mengakses pengaturan setelah itu, mungkin mengakibatkan nilai pengaturan yang tidak konsisten. Untuk menghindari masalah inkonsistensi ini, Anda harus menunggu permintaan jaringan asinkron untuk menyelesaikan sebelum mengakses pengaturan atau Anda hanya dapat menggunakan pengaturan yang ada yang Anda miliki pada awal sesi saat ini. Dalam kasus terakhir ini, pengaturan lokal diperbarui di latar belakang dan pemain akan melihat mereka dalam sesi berikutnya.

Method Benefits Drawbacks
Tunggu untuk penyelesaian permintaan - Nilai pengaturan konsisten
- Selalu menggunakan pengaturan terbaru
- Keterlambatan indetermin dalam pengaturan ketersediaan% kompleksitas kode asinkron
- Asynchronous code complexity
Gunakan pengaturan saat ini - Mengatur nilai konsisten
- Pengaturan tersedia segera
- Nilai pengaturan baru tidak digunakan sampai sesi kedua
- Pertama kali pemain menjalankan permainan, tidak ada pengaturan yang tersedia. (Gunakan nilai default.)

Contoh berikut mengilustrasikan kelas penyedia yang menetapkan sifatnya berdasarkan versi terakhir dari pengaturan jarak jauh Anda yang diambil dari layanan AnalyticsUnity Analytics
Lihat di Glossary
. Kelas RemoteSettings masih memperbarui pengaturan di latar belakang, sehingga setiap perubahan pengaturan yang digunakan dalam sesi berikutnya (pada sesi saat ini). Contoh berikut menggunakan pola singleton sehingga semua bagian dari permainan Anda yang menggunakan pengaturan ini mendapatkan nilai yang sama tidak peduli ketika kelas RemoteSettings menerima pembaruan jarak jauh.

using UnityEngine;

public class RemoteSettingProvider : MonoBehaviour {
    public float DefaultSpawnRateFactor = 1.0f;
    public float DefaultEnemySpeedFactor = 1.0f;
    public float DefaultEnemyStrengthFactor = 1.0f;
    public float SpawnRateFactor{ get; private set; }
    public float EnemySpeedFactor{ get; private set; }
    public float EnemyStrengthFactor{ get; private set; }

    // Singleton pattern
    private static RemoteSettingProvider _instance;
    public static RemoteSettingProvider Instance
    {
        get { return _instance; }
    }

    void Awake()
    {
        if (_instance != null && _instance != this)
        {
            Destroy(this.gameObject);
            return;
        }

        _instance = this;
        DontDestroyOnLoad(this.gameObject);

        //Use the current settings, before remote update, or default values if
        //the settings don't exist (yet)
        SpawnRateFactor
            = RemoteSettings.GetFloat("SpawnRateFactor", DefaultSpawnRateFactor);
        EnemySpeedFactor
            = RemoteSettings.GetFloat("EnemySpeedFactor", DefaultEnemySpeedFactor);
        EnemyStrengthFactor
            = RemoteSettings.GetFloat("EnemyStrengthFactor", DefaultEnemyStrengthFactor);
    }
} 

Menggunakan metode ini, pengaturan default selalu digunakan pertama kali pemain menjalankan permainan setelah instalasi.

Anda juga dapat menggunakan pendekatan hybrid yang memeriksa apakah pengaturan lokal ada menggunakan RemoteSettings.GetCount(). Jika pengaturan ada secara lokal, Anda dapat menggunakannya segera, tetapi jika tidak maka Anda menambahkan handler acara untuk menunggu pengaturan acara Updated:

SpawnRateFactor
    = RemoteSettings.GetFloat("SpawnRateFactor", DefaultSpawnRateFactor);
EnemySpeedFactor
    = RemoteSettings.GetFloat("EnemySpeedFactor", DefaultEnemySpeedFactor);
EnemyStrengthFactor
    = RemoteSettings.GetFloat("EnemyStrengthFactor", DefaultEnemyStrengthFactor);


if(RemoteSettings.GetCount() == 0){
    //If there are no settings, get them from remote
    RemoteSettings.Updated += HandleRemoteSettings;
    Ready = false;
} else {
    Ready = true;
}

Kelas lain yang menggunakan pengaturan jarak jauh Anda harus memeriksa properti Ready kelas penyedia Anda untuk menentukan apakah aman untuk mengakses pengaturan. Contoh berikut menggambarkan kelas yang menunggu pengaturan dan juga menggunakan waktu yang dapat dikonfigurasi:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RemoteSettingConsumer : MonoBehaviour {
    public float SpeedFactor = 0;
    public float StrengthFactor = 0;
    public float SpawnRateFactor = 0;
    public float Timeout = 0.125f;

    void Start () {
        StartCoroutine(GetRemoteSettings(Time.time));
    }

    IEnumerator GetRemoteSettings(float startTime){

        while(!RemoteSettingProvider.Instance.Ready && (Time.time - startTime) < Timeout)
            yield return null;

        SpeedFactor = RemoteSettingProvider.Instance.EnemySpeedFactor;
        StrengthFactor = RemoteSettingProvider.Instance.EnemyStrengthFactor;
        SpawnRateFactor = RemoteSettingProvider.Instance.SpawnRateFactor;
    }
}

Jika waktu berlalu sebelum pengaturan jarak jauh tersedia, maka nilai default Anda digunakan. Menggunakan timeout memungkinkan permainan untuk mendapatkan pengaturan terbaru dalam kasus normal di mana transaksi jaringan selesai dalam jumlah waktu yang sangat singkat, sementara tidak menunda startup dengan menunggu permintaan itu sendiri untuk waktu dalam kasus kegagalan jaringan.


  • 2018–08–23 Sitemap
  • Fitur baru di 2017. 1 Artikel
  • 2018–08–23 - Acara yang diperbarui tidak lagi dikirim setiap sesi pada 2018.1.
  • 2018–08–23 - Layanan yang kompatibel dengan Unity 5.5 seterusnya pada tanggal ini tetapi kompatibilitas versi dapat dikenakan perubahan.
Komponen Pengaturan jarak jauh
Pengujian Pengaturan Jarak Jauh