こんにちは。ykira(@rakipagu)です。
先日、初めてUnityを使ったアプリをリリースしました!
ClickerGold(クリッカーゴールド)というゲームアプリです。
リンクを載せておくので、良かったらプレイしてみてください。
さて、今回はClickerGoldを作成する時に使った「Firebase」のデータベースについて
具体的なコードなども交えて書きたいと思います。
Firebaseとは?
ひとことで言うと、GoogleのmBaaSです。
詳しい説明はサイトを見ていただければと思います。
同じようなものにニフクラのmobile backendなどがあります。
Firebaseのデータベースとは?
今回はRealtime Databaseという機能を使いました。
Json形式でアプリのデータを保存できます。
さらにリアルタイムで同期できたりもするのですが、今回は純粋にデータの保存用としてだけ使用しています。
無料枠として、同時接続数:100・保存容量:1GB・ダウンロード容量:10GB/月が用意されています。
軽く使ってみる分には十分な分量だと思います。
Firebaseにプロジェクトを作成する
ClickerGoldでは本番用と開発用で2つのプロジェクトを作成しました。
以後は開発用のプロジェクトで説明をしていきたいと思います。
Realtime Databaseのアクセスルールを設定する
データベースへのアクセスルールを設定する必要があります。
とりあえず触ってみる程度なので、readとwriteどちらもtrueでいいと思います。
※使い終わったらfalseにしておくとかする
本番はちゃんとしたほうがいいと思います。
Unityの設定とか
Unity用のFirebase公式マニュアルが用意されています。
本当に至れり尽くせりでcocos2dxなどとは比較にならないくらい恵まれてるなと思います。
流れとしては、下記だけで簡単にデータを保存することができます。
UnityのプロジェクトにFirebaseのSDKや設定ファイルなどを追加
マニュアルの「データを保存する」のページを参考にコードを書く
結果としてFirebaseのコンソールでは下記のように保存されたデータが表示されます。
開発用と本番用でFirebaseプロジェクトを分けたい!
分けたいなと思ったのですが、Firebaseの構成ファイルを置き換えないといけないんですよね。
手動でやると絶対ミスるので、自動化しました。
まず、Firebaseというフォルダ(UnitySDK入れたら作られる)に画像のように構成ファイルを入れます。
何も付いていないファイルが使用されるもの、-devとついているのが開発用、-prodが本番用です。
要は、開発モードのときは-devがついているファイルで置き換えられ、本番モードのときは-prodで置き換えられるという具合です。
これをエディター拡張で実行時とビルド時に行われるようにしました。
ちょっと長いですがソースは下記です。
これを、作成したEditorフォルダ配下に置きます(今回はEditor/FirebaseSetting.csとかにしました)
using UnityEngine; using UnityEditor; using UnityEditor.Build; using UnityEditor.Build.Reporting; using System.IO; /** * Firebaseの設定ファイルを置き換える */ [InitializeOnLoad] public class FirebaseSetting : IPreprocessBuildWithReport { // Androidの設定ファイル private const string FIREBASE_ANDROID_PLIST = "google-services.json"; // 実ファイル private const string FIREBASE_ANDROID_PLIST_PROD = "google-services-prod.json"; // 本番用 private const string FIREBASE_ANDROID_PLIST_DEV = "google-services-dev.json"; // 開発用 // iOSの設定ファイル private const string FIREBASE_IOS_PLIST = "GoogleService-Info.plist"; // 実ファイル private const string FIREBASE_IOS_PLIST_PROD = "GoogleService-Info-prod.plist"; // 本番用 private const string FIREBASE_IOS_PLIST_DEV = "GoogleService-Info-dev.plist"; // 開発用 // Firebaseの設定ファイルのパス private static readonly string firebasePath = Application.dataPath + "/Firebase/"; // 実行順 ※低い値が優先される public int callbackOrder { get { return 0; } } /** * Unityエディタ実行時 */ static FirebaseSetting() { Debug.Log("エディタ実行開始"); replaceFirebaseSetting(); } /** * ビルド実行時 */ public void OnPreprocessBuild (BuildReport report) { Debug.Log("ビルド開始"); replaceFirebaseSetting(); } /** * 設定ファイルの置き換え */ static void replaceFirebaseSetting() { #if UNITY_ANDROID // Firebaseの設定ファイルを置き換え string firebaseFile = Application.identifier.Contains("dev") ? FIREBASE_ANDROID_PLIST_DEV : FIREBASE_ANDROID_PLIST_PROD; File.Copy(firebasePath + firebaseFile, firebasePath + FIREBASE_ANDROID_PLIST, overwrite: true); Debug.Log("Android Firebaseの設定ファイル置き換え:" + firebaseFile); #elif UNITY_IOS // Firebaseの設定ファイルを置き換え string firebaseFile = Application.identifier.Contains("dev") ? FIREBASE_IOS_PLIST_DEV : FIREBASE_IOS_PLIST_PROD; File.Copy(firebasePath + firebaseFile, firebasePath + FIREBASE_IOS_PLIST, overwrite: true); Debug.Log("iOS Firebaseの設定ファイル置き換え:" + firebaseFile); #endif } }
エディタ拡張については下記などを参照してみてください。
これ使えるようになるとUnityの開発がどんどん楽しくなりますよ(作業は増えますが……)
Firebaseを使って快適にアプリを作っていこう!
Firebaseを使うと、バックエンドのサーバを用意せずに様々なことができるようになります。
余計な作業も発生せず、アプリの内容だけに注力できますね。
今後プッシュ通知などでも使おうと思っていますので、またブログにしたいと思います。
それでは、ここまで読んでいただきありがとうございました!
告知
弊社からゲームアプリがリリースされました。
簡単操作で楽しめるジャンプアクションゲームなっています。
かわいいニワトリが沢山登場しますよ。
apps.apple.com