バージョン
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が起動したら下画像を参考にして「Packages: Unity Registry」にしてください。
これで、Unityに搭載されているPackageを表示することができるようになります
変更したら、下画像①を参考にして「Remote Config」と検索してください(remoだけでもヒットしますね!)
すると、左側に「Remote Config」が出てくると思うので下画像②の「Install」をクリックしてインストールしてください
「Remove」ボタンが活性化したらインストール完了です!
※画像ではバージョン1.0.9になっていますが2.0.0にアップデートしてください!(1.0.9だとうまく値の取得ができなかったです...)
スポンサーリンク
Remote Configの使い方
インストールが完了してからまずやることは「Project ID」の作成です
Project IDの作成
雲マーク(画像内①)をクリックするとServicesタブが開かれるのでその中の「General settings」(画像内②)をクリックしてください
「Project Settings」が開きますのでOrganizationsを選択して「Create project ID」をクリックしてください
これで「Project ID」の作成は完了です!
Api Compatibility Levelの変更
「Edit > Project Settings...」をクリック
「Player > Other Settings > Configuration > Api Compatibility Level」を「.NET 4.x」に変更する
サーバーに値の設定
次は、(サーバーから)取得したい値を設定していきましょう!
「Window > Remote Config」をクリックしてRemote Configを起動しましょう
「Add Setting」をクリックしてください
KeyとTypeとValueを設定していきましょう
Key:このKeyを指定して値を取得するのでわかりやすいのを付けてください
Type:取得したい値の型を設定
Value:取得したい値を設定
最後に、「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を使おうとしていたんですけど、実装はこっちの方が全然楽だと思います!
参考
サーバーサイド不要&無料でゲーム内のデータをリモートで変更出来るUnity公式の機能 Remote Config 【Unity】【Unity Services】