7月7日、BitSummit出展準備でめっちゃ忙しい七夕の日、NCMB Unity SDKがv2.2.0にアップデートされ、新たに「ファイルストア機能」が追加されました!
ファイルストア機能とは?
画像やテキスト、音楽などさまざまな種類のファイルを保存することができるストレージ機能です。
mb.cloud.nifty.com/function.htm#filestore
「データストア機能」は文字列や数値などの保存に利用するものですが、ファイルストアはメディアコンテンツである画像や音声、動画を保存しておくことができます。
ファイルはアプリから保存することもできますし、管理画面からデータをアップロードすることもできます。 逆に保存されたデータはアプリで読み込むこともできますし、ブラウザから見ることもできます。
今回は後者のアプリ→NCMB→Webの順番で画像データをアップし、アプリにスクリーンショットの公開機能をつけてみます。
まずはスクリーンショットを生成
Unityにおけるスクリーンショットの撮影はApplication.CaptureScreenshot()を使ってもよいのですが、保存位置を指定できなかったり完了時のコールバックが無かったりで使いにくいので、今回はTexture2DクラスのReadPixels()を使ってスクリーンショットを生成する方法をとります。
適当なシーンにボタンを配置します。
※特に面白い絵を出す余裕がなかった。
ボタンから下記のスクリプトを呼び出すようにしましょう。 実際にNCMBのファイルストアに保存するには、Texture2Dのデータをjpg画像にエンコードしてバイト配列にしてやり、NCMBFIleクラスに渡してSaveAsyncを呼びます。
int width = Screen.width; int height = Screen.height; Texture2D tex = new Texture2D(width, height, TextureFormat.RGB24, false); tex.ReadPixels(new Rect(0, 0, width, height), 0, 0); tex.Apply(); byte[] screenshot = tex.EncodeToJPG(); NCMBFile file = new NCMBFile("ScreenShot.jpg", screenshot); file.SaveAsync((NCMBException error) => { if (error != null) { // 失敗 } else { // 成功 } });
はい!これで保存できました。管理画面で確認するとファイルが確認できます。
続いて、このファイルストアに保存した画像ファイルをhttpsで取得したいので、管理画面のアプリ設定→データ・ファイルストアから、「公開ファイル設定」のHTTPSでの取得を「有効」にして下さい。
これで、アプリで保存したスクリーンショットをブラウザから見ることができます。 URL命名規則は
https://mb.api.cloud.nifty.com/2013-09-01/applications/YOUR_APPLICATION_ID/publicFiles/YOUR_FILE_NAME
となり、YOUR_APPLICATION_IDが管理画面から確認できるアプリID、YOUR_FILE_NAMEがファイルストアに保存したファイル名を指定します。
スマホのブラウザからアクセスしてみました。
今回は特にユーザー管理をやってないので、全ユーザーが「ScreenShot.jpg」を上書きし続けるアレな感じになっています。が、これはこれでゲームの公式サイトのトップにリンクしたりすれば、常に新しいバトルのスクショが見れる、みたいな仕掛けが作れそうです。