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)); } });
まとめ
ファイルストアのデータはバイト文字列なので、その取り扱いさえ分かれば画像に限らず、音楽や動画などのバイナリファイルも扱えるかと思います。ぜひこの方法を使って皆さんのUnityアプリを楽しいものにしてください。
ユーザコミュニティでは他にも質問がたくさん寄せられています。コーディングで困ったことがあれば、ぜひ聞いてみてください。
NIFCLOUD-mbaas/UserCommunity: ニフクラ mobile backend ユーザーコミュニティ