Unity プロジェクトに Firebase を追加するplat_iosplat_androidplat_unity

Firebase Unity SDK を使用して Unity ゲームをパワーアップさせることができます。

Unity プロジェクトに Firebase を簡単に組み込めることを示すために、サンプルゲーム「MechaHamster」を作成しました。このゲームは、GitHubApp StoreGoogle Play ストアからダウンロードできます。

MechaHamster(GitHub)

MechaHamster(App Store)

MechaHamster(Play ストア)


Firebase でゲームをパワーアップする方法の詳細については、Firebase のゲームのページをご覧ください。

ステップ 1: 環境を設定する

  • Unity 5.3 以降をインストールします。

  • (iOS のみ)以下にアクセスできることを確認します。

    • Xcode 9.4.1 以降
    • CocoaPods 1.4.0 以降
  • Unity プロジェクトが適切な OS レベルをターゲットにしていることを確認します。

    • iOS の場合 - iOS 8 以降
    • Android の場合 - API レベル 16(Jelly Bean)以降
  • Unity プロジェクトを実行するためのデバイスまたはエミュレータを設定します。

    • iOS の場合 - Firebase Cloud Messaging を使用するために必要なもの:

      • 物理 iOS デバイス
      • プッシュ通知を有効にした APNs 証明書
    • Android の場合 - エミュレータでは Google Play のエミュレータ イメージを使用する必要があります。

  • Google アカウントを使用して Firebase にログインします。

Unity プロジェクトをまだ用意していない場合、Firebase プロダクトを試すだけであれば、クイックスタート サンプルをダウンロードしてご利用いただけます。

ステップ 2: Firebase プロジェクトを作成する

Unity プロジェクトに Firebase を追加する前に、Unity プロジェクトに接続するための Firebase プロジェクトを作成する必要があります。Firebase プロジェクトの詳細については、Firebase プロジェクトについて理解するをご覧ください。

ステップ 3: アプリを Firebase に登録する

Firebase プロジェクトに接続するアプリやゲームを登録できます。

  1. Firebase コンソールの [Project Overview] ページの中央にある Unity アイコンをクリックして設定ワークフローを起動します。

    すでに Firebase プロジェクトにアプリを追加している場合は、[アプリを追加] をクリックするとプラットフォームのオプションが表示されます。

  2. Unity プロジェクトのどのビルド ターゲットを登録するかを選択します。両方のターゲットを登録することもできます。

  3. Unity プロジェクトのプラットフォーム固有の ID を入力します。

    1. Unity プロジェクトを Unity IDE で開きます。

    2. [Build Settings] > [iOS] または [Android] > [Player Settings] > [Other Settings] に移動します。

      Unity プロジェクトの ID はバンドル ID の値です(ID の例: com.yourcompany.unity-project-name)。

    3. プラットフォーム固有の ID をそれぞれ該当する項目に入力します。

      • iOS の場合 - Unity プロジェクトの iOS ID を [iOS バンドル ID] に入力します。

      • Android の場合 - Unity プロジェクトの Android ID を [Android パッケージ名] に入力します。

        • 「パッケージ名」と「アプリケーション ID」は、多くの場合、同じ意味に使用されます。
  4. (省略可)Unity プロジェクトのプラットフォーム固有のニックネームを入力します。

    これらのニックネームは内部用の簡便な ID であり、Firebase コンソールでのみ表示されます。

  5. [アプリの登録] をクリックします。

ステップ 4: Firebase 構成ファイルを追加する

  1. Firebase コンソールの設定ワークフローでプラットフォーム固有の Firebase 構成ファイルを取得します。

    • iOS の場合 - [GoogleService-Info.plist をダウンロード] をクリックします。

    • Android の場合 - [google-services.json をダウンロード] をクリックします。

  2. Unity プロジェクトで [プロジェクト] ウィンドウを開き、構成ファイルを Assets フォルダに移動します。

    Firebase 構成ファイルは Assets フォルダ内の任意の場所に置くことができます。

  3. Firebase コンソールの設定ワークフローに戻り、[次へ] をクリックします。

ステップ 5: Firebase Unity SDK を追加する

このセクションの手順は、サポートされている Firebase プロダクトを Unity プロジェクトに追加する方法の一例です。この例では、Firebase 向け Google アナリティクスを追加する方法を示します。

  1. Firebase コンソールで [Firebase Unity SDK をダウンロード] をクリックし、適切な場所で SDK を解凍します。

    • Firebase Unity SDK はいつでも再ダウンロードできます。

    • Firebase Unity SDK はプラットフォーム固有ではありません。

  2. 開いている Unity プロジェクトで、[Assets] > [Import Package] > [Custom Package] を選択します。

  3. 解凍した SDK の中からアナリティクス SDK(FirebaseAnalytics.unitypackage)を選択してインポートします。

    その他のサポートされている Firebase プロダクトもインポートできます。

  4. [Import Unity Package] ウィンドウで [Import] をクリックします。

  5. Firebase コンソールの設定ワークフローに戻り、[次へ] をクリックします。

ステップ 6: Google Play 開発者サービスの要件を確認する

Android 向け Firebase Unity SDK には Google Play 開発者サービスが必要であり、SDK を使用する前に最新版にしておく必要があります。

アプリケーションの先頭に次のコードを追加します。SDK で他のメソッドを呼び出す前に Google Play 開発者サービスを確認し、必要であれば、Firebase Unity SDK で必要とされるバージョンに更新します。

Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
  var dependencyStatus = task.Result;
  if (dependencyStatus == Firebase.DependencyStatus.Available) {
    // Create and hold a reference to your FirebaseApp,
    // where app is a Firebase.FirebaseApp property of your application class.
    //   app = Firebase.FirebaseApp.DefaultInstance;

    // Set a flag here to indicate whether Firebase is ready to use by your app.
  } else {
    UnityEngine.Debug.LogError(System.String.Format(
      "Could not resolve all Firebase dependencies: {0}", dependencyStatus));
    // Firebase Unity SDK is not safe to use here.
  }
});

これで設定は完了です。Unity プロジェクトは Firebase を使用するように登録、構成されました。

既知の問題

起動時に iOS がクラッシュする

iOS で Firebase を初期化するときにクラッシュする場合があります(ログに +[FIRApp firebaseUserAgent] などが記録されます)。

Unity SDK でこの問題が発生しないようにするには、使用している iOS SDK のバージョンを更新します。これを行うには、Assets > Firebase > Editor > *Dependencies.xml を編集し、iosPod に関する Firebase のバージョンを 5.20.0 に変更します。

詳しくは、GitHub でこの問題をご覧ください。

Unity 2017.x 以降を使用している場合の .NET 互換性

Firebase では、Unity 2017 以降の実験的ビルド オプションとして .NET 4.x がサポートされています。Firebase のプラグインでは、Parse SDK のコンポーネントを使用して .NET 4.x のクラスを提供していますが、その中の一部のクラスはそれ以前のバージョンの .NET のものです。

したがって、Firebase Unity SDK バージョン 5.4.0 以降では、Firebase Unity SDK の dotnet3 および dotnet4 ディレクトリに .NET 3.x または .NET 4.x と互換性のあるプラグインが提供されています。

プロジェクトで有効な .NET バージョンと互換性がない Firebase プラグインをインポートすると、Parse SDK によって実装された .NET フレームワークの一部の型でコンパイル エラーが発生します。

.NET 3.x を使用している場合に、コンパイル エラーを解決するには次のようにします。

  1. すべてのプラットフォームで次の DLL を削除または無効にします。
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll
  2. すべてのプラットフォームで次の DLL を有効にします。
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll

.NET 4.x を使用している場合に、コンパイル エラーを解決するには次のようにします。

  1. すべてのプラットフォームで次の DLL を削除または無効にします。
    • Parse/Plugins/Unity.Compat.dll
    • Parse/Plugins/Unity.Tasks.dll
  2. すべてのプラットフォームで次の DLL を有効にします。
    • Parse/Plugins/dotNet45/Unity.Compat.dll
    • Parse/Plugins/dotNet45/Unity.Tasks.dll

別の Firebase プラグインをインポートする場合:

  • Unity プロジェクトで [Assets] > [Play Services Resolver] > [Version Handler] > [Update] を選択し、プロジェクト用に正しい DLL を有効にします。

.NET 4.x プロジェクトでの Unity 2017.1 IL2CPP のコンパイル

Firebase では、Unity 2017 以降の実験的ビルド オプションとして .NET 4.x がサポートされています。Firebase のプラグインでは、Parse SDK のコンポーネントを使用して .NET 4.x のクラスを提供していますが、その中の一部のクラスはそれ以前のバージョンの .NET のものです。

したがって、Firebase Unity SDK バージョン 5.4.0 以降では、Parse 型(Parse 実装 System.Threading.Tasks.Task など)を .NET フレームワークに転送する、型転送の DLL が用意されています。残念ながら、Unity 2017.1.x に付属する IL2CPP(C# を C++ に変換するトランスパイラ)は型転送の DLL を適切に処理しないため、以下のようなビルドエラーが発生します。

Fatal error in Unity CIL Linker Mono.Cecil.ResolutionException: Failed to
resolve System.Threading.Tasks.TaskCompletionSource`1<T>

現時点で、Unity 2017.1 における .NET 4.x IL2CPP のビルドエラーを回避できる方法はないため、Unity 2017.2 以降にアップグレードして、IL2CPP でコンパイルされたプロジェクトで .NET 4.x を使用する必要があります。

Unity 2017.2 のネットワーキング

Firebase Realtime Database は .NET ネットワーキング スタックを使用して TLS ネットワーク接続を構築します。.NET 4.6 を使用している場合は、Unity 2017.2 の TLS 機能が正しく動作しないと、エディタとデスクトップで Realtime Database プラグインにおけるエラーが発生します。

この問題を回避できる方法はないため、Unity の別のバージョン(2017.1 や 2017.3 など)を使用する必要があります。

デスクトップ ワークフローを設定する(ベータ版

ゲームを作成する場合、通常は、Unity エディタやデスクトップ プラットフォームでまずゲームをテストしてから、開発中のモバイル デバイスにデプロイしてテストする方が簡単になります。このワークフローをサポートするために、Windows、OS X、Linux、および Unity エディタ内で実行できる Firebase Unity SDK のサブセットが用意されています。

  1. モバイル プラットフォームの場合と同じ手順に従って、デスクトップ プラットフォームの Unity プロジェクトを設定します(上記の Unity プロジェクトを Firebase プロジェクトに登録するから開始)。

  2. Unity IDE で Unity プロジェクトを実行するか、デスクトップ用に Unity プロジェクトをビルドします。

  3. (省略可)Unity プロジェクトを編集モードで実行します。

    Firebase Unity SDK は Unity の編集モードでも実行できるため、エディタのプラグインで使用できます。

    1. エディタで使用される FirebaseApp を作成する場合、デフォルトのインスタンスは使用しません。

    2. 代わりに FirebaseApp.Create() 呼び出しに対して一意の名前を指定します。

      Unity IDE で使用されるインスタンスと Unity プロジェクトで使用されるインスタンスの間のオプションの競合を避けるために、この操作は重要です。

サポートされている Firebase プロダクト

Unity Firebase ライブラリの詳細については、リファレンス ドキュメントをご覧ください。

iOS および Android の Firebase Unity SDK では、次の Firebase プロダクトがサポートされています。

Firebase プロダクト Unity パッケージ
AdMob AdMob Unity プラグインで個別に配信
アナリティクス FirebaseAnalytics.unitypackage
Authentication FirebaseAuth.unitypackage
Cloud Functions FirebaseFunctions.unitypackage
Cloud Messaging FirebaseMessaging.unitypackage
Cloud Storage FirebaseStorage.unitypackage
Crashlytics FirebaseCrashlytics.unitypackage
Dynamic Links FirebaseDynamicLinks.unitypackage
Realtime Database FirebaseDatabase.unitypackage
Remote Config FirebaseRemoteConfig.unitypackage

サポートされている Firebase プロダクト(デスクトップ)

Firebase Unity SDK にはプロダクトのサブセットに対するデスクトップ ワークフローのサポートが含まれているため、Firebase の特定の部分を Unity エディタや、Windows、OS X、Linux のスタンドアロン デスクトップ ビルドで使用できます。

Firebase プロダクト(デスクトップ) Unity パッケージ
Authentication FirebaseAuth.unitypackage
Cloud Functions FirebaseFunctions.unitypackage
Cloud Storage FirebaseStorage.unitypackage
Realtime Database FirebaseDatabase.unitypackage
Remote Config FirebaseRemoteConfig.unitypackage

Firebase では残りのデスクトップ ライブラリはスタブ(非機能的)実装であり、Windows、OS X、Linux 向けのビルドを便利にするために提供されています。そのため、デスクトップが対象である場合でも、条件に応じてコードをコンパイルする必要はありません。

サポート

Firebase サポート