i-school - FireBaseとUnityの連携

FireBaseにアップした画像データをUnity内のフォルダにダウンロードする


 FireBaseとUnityの連携自体については公式リファレンスを参照してください。
Unity プロジェクトに Firebase を追加する
https://firebase.google.com/docs/unity/setup?hl=ja

 UnityのStreamingAssets内にFireBaseに登録してあるPNG画像データをTextureとしてダウンロードします。



FireBaseDownLoader.cs

<= クリックすると開きます



<Application.dataPath>


 Unity のアプリケーションが保存されているパスを取得します。
プラットフォームにより保存先が異なるため、実行したデバイスにより、パスの情報も異なります。

  // ローカルのパス(保存先)の指定
  string local_url = Application.dataPath + "/StreamingAssets/" + fileName + ".png";


参考サイト
Unity 公式スクリプトリファレンス
Application.dataPath
https://docs.unity3d.com/ja/current/ScriptReferenc...
Qiita @w_yang 様
unityでplatformによって取得できるパス
https://qiita.com/w_yang/items/8458cd790607d14b1b3...


<FirebaseStorage.DefaultInstance>


 FireBase に用意されている API の1つであり、FirebaseStorage クラスに含まれているメソッドの1つです。
デフォルトの Firebase.FirebaseApp で初期化された FirebaseStorage インスタンスを返し、利用できる状態にします。

 // FirebaseStorage の初期化
 FirebaseStorage storage = FirebaseStorage.DefaultInstance;


参考サイト
Firebase マニュアル
FirebaseStorage.DefaultInstance
https://firebase.google.com/docs/reference/unity/c...


<FirebaseStorage.GetReferenceFromUrl>

 
 FireBase に用意されている API の1つであり、FirebaseStorage クラスに含まれているメソッドの1つです。
GetReferenceFromUrl メソッドを実行すると、引数で指定した URL を指定し利用できる状態にします。戻り値は StorageReference 型になります。

  // 引数で指定した URL を指定し利用できる状態にする
  StorageReference gs_reference = storage.GetReferenceFromUrl("gs://"自分のFireBaseのアドレス".appspot.com/"フォルダ名。ここではTexture/" + fileName + ".png");


参考サイト
Firebase マニュアル
FirebaseStorage.GetReferenceFromUrl
https://firebase.google.com/docs/reference/android...


<Firebase.Storage.StorageReference.GetFileAsync>


 FireBase に用意されている API の1つであり、StorageReference クラスに含まれているメソッドの1つです。
GetFileAsync メソッドを実行すると、非同期処理によって FireBase からデータのダウンロードを行い、メソッドの引数で指定したパスにデータを保存します。

 戻り値として Task が用意されており、処理の結果を通知する機能があります。
今回はその機能を利用し、ダウンロードに失敗しておらず、処理のキャンセルしていない場合のみ、ダウンロードの成功を Debug.Log メソッドを利用して表示しています。

 // FireBaseからデータをダウンロードし、引数で指定したローカルのパス(フォルダ)に入れる
 gs_reference.GetFileAsync(local_url).ContinueWith(task => 
  {
   // 処理に失敗しておらず、かつ、処理をキャンセルしていない場合
    if (!task.IsFaulted && !task.IsCanceled)
      {
         Debug.Log("File downloaded.");
         isLoad = false;
      }
  });


参考サイト
Firebase マニュアル
Firebase.Storage.StorageReference.GetFileAsync
https://firebase.google.com/docs/reference/unity/c...


ダウンロードしたTexture画像をUnity起動時にTexture2D、またはSpriteに変換して読み込む


 StreamingAssetsにある画像データを読み込みます。読み込む際にはパス(StreamingAssets内)を指定します。



TextureLoader.cs

<= クリックすると開きます



<File.ReadAllBytes メソッド>


 引数に指定したバイナリファイルを開き、ファイルの内容をバイト配列に読み取った後、ファイルを閉じます。

  // ロードしたいファイルのあるローカル内のパスを指定
  string local_url = Application.dataPath + "/StreamingAssets/" + "ダウンロードしたファイルの名前を指定します" + ".png";

  // ファイルをバイト配列に読み取る
  byte[] imgData = File.ReadAllBytes(local_url);


参考サイト
MicroSoft
File.ReadAllBytes
https://docs.microsoft.com/ja-jp/dotnet/api/system...


<ImageConversion.LoadImage メソッド>


 PNG / JPG(またはサポートされている形式)の画像のバイト配列をテクスチャ(Texrue2D 型)にロードします。
引数には画像データのバイト配列と、ピクセルデータの読み込み許可設定を bool 型(初期値は false)を指定します。

  // バイト配列の情報をテクスチャに変換
  texture.LoadImage(imgData, false);


参考サイト
Unity公式スクリプトリファレンス
ImageConversion.LoadImage
https://docs.unity3d.com/ja/current/ScriptReferenc...


<Sprite.Create メソッド>


 テクスチャを元に、新しい Sprite を作成するメソッドです。引数のオーバーロードが複数用意されています。

 // テクスチャを元に Sprite を新規作成。サイズと Pivot を指定
  sprite = Sprite.Create(texture, new Rect(0.0f, 0.0f, texture.width, texture.height), new Vector2(0.5f, 0.5f));


参考サイト
Unity公式スクリプトリファレンス
Sprite.Create
https://docs.unity3d.com/jp/current/ScriptReferenc...



 以上になります。

 ゲームを実行して確認を行ってください。