Unity

【Unity】UnityのRemote Configを導入してみた

スポンサーリンク

バージョン

Unity:2020.1.4f1

Remote Config:2.0.0

 

Unity Remote Configで何ができるの??

Unity Remote Configと書いていますが、実はRemote Configはfirebaseにもあります(Firebase Remote Config)

 

今回は、Firebaseの方ではなくUnityに備わっているものを使用します!

 

Remote Configでできることを簡潔にいうと「アプリリリース後でも変数の値を変更できる」ということです!

しっくりきている人があまりいないかもしれないので例を2つほどあげておきます

例1:URL編

「アプリ内でURLを指定してwebブラウザを起動する」という処理を実装していたとします。

通常、URLを直打ち(もしく変数に代入)することになるかと思うのですがこれだと、万が一アクセスしたいサイトのURLが変更された場合アプリをアップデートしないといけなくなってしまいます。

アプリを修正してビルドしてアップロードして審査があって...ととてつもない時間がかかってしまうのですがRemote Configを使えば一瞬で変更することができるのです!!

 

例2:強制アップデート編

リリースしていたアプリに致命的なバグが見つかりそのままではいけないのでアップデートをしたが、ユーザーはアップデートがあることに気づかずそのままアプリを利用し続けてしまうことも少なくありません。

Remote Configを使うことで、アプリのバージョンが一致しなかった時はポップアップを表示させるといった処理をすることができます!

 

Unity Remote Configの導入方法

Unityを起動したら「Window > Package Manager」をクリックしてPackage managerを起動してください。

Package Managerの起動

 

Package Managerが起動したら下画像を参考にして「Packages: Unity Registry」にしてください。

これで、Unityに搭載されているPackageを表示することができるようになります

Package Managerの設定変更

 

変更したら、下画像①を参考にして「Remote Config」と検索してください(remoだけでもヒットしますね!)

すると、左側に「Remote Config」が出てくると思うので下画像②の「Install」をクリックしてインストールしてください

Remote Configのインストール

 

「Remove」ボタンが活性化したらインストール完了です!

※画像ではバージョン1.0.9になっていますが2.0.0にアップデートしてください!(1.0.9だとうまく値の取得ができなかったです...)

 

スポンサーリンク

Remote Configの使い方

インストールが完了してからまずやることは「Project ID」の作成です

 

Project IDの作成

雲マーク(画像内①)をクリックするとServicesタブが開かれるのでその中の「General settings」(画像内②)をクリックしてください

ProjectIDの作成1

「Project Settings」が開きますのでOrganizationsを選択して「Create project ID」をクリックしてください

ProjectIDの作成2

これで「Project ID」の作成は完了です!

 

Api Compatibility Levelの変更

「Edit > Project Settings...」をクリック

ProjectSettingsを開く

「Player > Other Settings > Configuration > Api Compatibility Level」を「.NET 4.x」に変更する

Api Compatibility Levelの変更

 

サーバーに値の設定

次は、(サーバーから)取得したい値を設定していきましょう!

「Window > Remote Config」をクリックしてRemote Configを起動しましょう

Remote Config起動

「Add Setting」をクリックしてください

Remote Configに値を追加1

 

KeyとTypeとValueを設定していきましょう

Key:このKeyを指定して値を取得するのでわかりやすいのを付けてください

Type:取得したい値の型を設定

Value:取得したい値を設定

Remote Configに値を追加2

 

最後に、「Push」を押して(サーバーに)保存します

ちなみに「Pull」を押すと現在サーバーに設定されている値を取得することができます

 

値を取得するコード

取得した値をコンソールに表示してみましょう

とりあえずコードを先に記載しておきます

using UnityEngine;
using Unity.RemoteConfig;

public class ForcedUpdate : MonoBehaviour
{

    public struct UserAttributes { }
    public struct AppAttributes { }

    void Awake()
    {
        //RemoteConfigから値を取得した時に「ApplyRemoteSettings」を実行する
        ConfigManager.FetchCompleted += ApplyRemoteSettings;

        // Set the user’s unique ID:
        //ConfigManager.SetCustomUserID("Test");

        //RemoteConfigから値を取得する
        ConfigManager.FetchConfigs<UserAttributes, AppAttributes>(new UserAttributes(), new AppAttributes());
    }

    void ApplyRemoteSettings(ConfigResponse configResponse)
    {
        switch (configResponse.requestOrigin)
        {
            //RemoteConfigの値が取得できなかった時、かつキャッシュの値がない時
            case ConfigOrigin.Default:
                Debug.Log("Default : " + ConfigManager.appConfig.GetString("TestKey"));
                break;
            //RemoteConfigの値が取得できなかった時、かつキャッシュの値がある時
            case ConfigOrigin.Cached:
                Debug.Log("Cached : " + ConfigManager.appConfig.GetString("TestKey"));
                break;
            //RemoteConfigの値を取得した時
            case ConfigOrigin.Remote:
                Debug.Log("Remote : " + ConfigManager.appConfig.GetString("TestKey"));
                break;
        } 
    }
}

 

コメントも記載しているのですが簡単に説明していきます

2行目:using Unity.RemoteConfig;

ここは、必ず追加しましょう。エラーでまくるんで!

7.8行目:UserAttributes { }.AppAttributes { }

データを取得する際にアプリの属性(バージョンなど)やユーザーの属性で取得する値を変えたい時に使用します。全員同じ値を取得するなら、ここは空のままで問題ないです!

13行目:ConfigManager.FetchCompleted += ApplyRemoteSettings;

ここで、Remote Configから値を取得した時に「ApplyRemoteSettings」を呼ぶように設定しています

16行目:ConfigManager.SetCustomUserID("Test");

ここは設定してもしなくても問題ないみたいです。

ユーザIDを設定して、ユーザを識別することができるみたいです!

19行目:ConfigManager.FetchConfigs<UserAttributes, AppAttributes>(new UserAttributes(), new AppAttributes());

ここで、Remote Configから値を取得しています。値を取得したい時に、実行しましょう

基本的には、最初に取得して変数で保持するのがいいと思っています

24行目:switch (configResponse.requestOrigin)

値を取得する時に、どこから取得したかを場合わけしています

27行目:case ConfigOrigin.Default:

Remote Configから値を取得できなくて、キャッシュもなかった場合

※Remote Configから値を一度でも取得するとその値をキャッシュとして保存しています

(次回、取得時にRemote Configから取得できなかったときはキャッシュの値が使用されます)

31行目:case ConfigOrigin.Cached:

Remote Configから値を取得できなかったが、キャッシュがある場合

35行目:case ConfigOrigin.Remote:

Remote Configから値を取得できた場合

 

 

以上です!最近までUnity Remote Configの存在知らなくてfirebase Remote Configを使おうとしていたんですけど、実装はこっちの方が全然楽だと思います!

 

参考

Remote Settingsの作成と変更

サーバーサイド不要&無料でゲーム内のデータをリモートで変更出来るUnity公式の機能 Remote Config 【Unity】【Unity Services】

 

-Unity

© 2020 ITime