FJCT_ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

Unityでファイルストアから画像をダウンロードして表示する

f:id:mbaasdevrel:20210325174431p:plain

NCMBではユーザコミュニティとして、コーディング中に分からないことがあれば聞ける場所を用意しています。

NIFCLOUD-mbaas/UserCommunity: ニフクラ mobile backend ユーザーコミュニティ

今回はこのコミュニティに寄せられた、ファイルストアから画像データをダウンロードしてUnityで表示する方法を紹介します。

【Unity × NCMB】ファイルストアから画像を取得し、unity側で表示させる方法がわかりません

利用するのはNCMBFile

ファイルストアからダウンロードするのは NCMBFile の FetchAsync を利用します。基本形は次のようになります。

string fileName = "unity.png";
NCMBFile file = new NCMBFile (fileName);
file.FetchAsync ((byte[] fileData, NCMBException error) => {
    if (error != null) {
        // 失敗
        Debug.Log(error);
    } else {
        // 成功
    }
});

そして取得できる fileData はバイト文字列になりまう。これをあらかじめUnityにUIとして追加したImageに反映します。これは画像をSpriteにして適用します。バイト文字列からテクスチャに変換し、さらにスプライトにすればOKです。

処理としては次のようになります。

// テクスチャの準備
Texture2D texture = new Texture2D(0, 0);
texture.LoadImage(fileData);
// スプライト用にRectを準備
Rect rect = new Rect(0f, 0f, texture.width, texture.height);
// 画像を表示
// 表示対象のImageコンポーネント
GameObject image_object = GameObject.Find("objImage");
Image image_component = image_object.GetComponent<Image>();
image_component.sprite = Sprite.Create (texture, rect, new Vector2 (0.5f, 0.5f));

全体は次のようになります。

string fileName = "unity.png";
NCMBFile file = new NCMBFile (fileName);
file.FetchAsync ((byte[] fileData, NCMBException error) => {
    if (error != null) {
        // 失敗
        Debug.Log(error);
    } else {
        // 成功
        // テクスチャの準備
        Texture2D texture = new Texture2D(0, 0);
        texture.LoadImage(fileData);
        // スプライト用にRectを準備
        Rect rect = new Rect(0f, 0f, texture.width, texture.height);
        // 画像を表示
        // 表示対象のImageコンポーネント
        GameObject image_object = GameObject.Find("objImage");
        Image image_component = image_object.GetComponent<Image>();
        image_component.sprite = Sprite.Create (texture, rect, new Vector2 (0.5f, 0.5f));
    }
});

f:id:mbaasdevrel:20210325174431p:plain

まとめ

ファイルストアのデータはバイト文字列なので、その取り扱いさえ分かれば画像に限らず、音楽や動画などのバイナリファイルも扱えるかと思います。ぜひこの方法を使って皆さんのUnityアプリを楽しいものにしてください。

ユーザコミュニティでは他にも質問がたくさん寄せられています。コーディングで困ったことがあれば、ぜひ聞いてみてください。

NIFCLOUD-mbaas/UserCommunity: ニフクラ mobile backend ユーザーコミュニティ

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。