この記事でのバージョン
Unity 2017.2.0f3
NCMB 3.1.0
はじめに
Asset Bundleをサーバーに置いてダウンロードする、というのを試してみようとしてた時に
NCBM(ニフティクラウド mobile backend)のファイルストア機能というものを思い出しました。
これを使えば簡単に実現できそうだと思ったのですが、
残念ながらファイルストア機能はAsset Bundleの配信には適していないようです。
ファイルストア機能はCDNではないため、Unity Asset Bundleを用いたファイルの配信には適しません。
ファイルストア (Unity) : 基本的な使い方 | ニフクラ mobile backend
適していないということは出来なくはない、という事なので物は試しにとやってみました。
なお、NCMBの登録や導入は以下の記事を参照のこと。
アップロード
まずはてきとうにAssetBundleを生成し、
それをそのままファイルストアにアップロード
これでURL(公開ファイルURL)を取得出来るようになります。
ダウンロード
次にアップロードしたAssetBundleをダウンロードしてみます。
ファイルのダウンロードにはWWWクラスを使う事も出来ますが、
今は新しく出来た(と言っても結構前)UnityWebRequestを使った方が良さそうです。
UnityWebRequestは、Unity の WWW クラスをリプレースしたものです。
実際にUnityWebRequestを使ってAssetBundleをダウンロードしてみると以下のような感じに。
private IEnumerator Start(){ //AssetBundleをダウンロード(UnityWebRequestを使うにはusing UnityEngine.Networking;が必要) UnityWebRequest request = UnityWebRequest.GetAssetBundle(ASSET_BUNDLE_URL, version:1, crc:0); yield return request.SendWebRequest(); //エラーの時はログで表示 if(request.isHttpError || request.isNetworkError) { Debug.Log(request.error); } else{ //AssetBundleを取得、その中からSpriteを取得し設定 AssetBundle assetBundle = ((DownloadHandlerAssetBundle)request.downloadHandler).assetBundle; GetComponent<SpriteRenderer>().sprite = assetBundle.LoadAsset<Sprite>("character_53"); } }
なお、UnityWebRequest.GetAssetBundleはWWW.LoadFromCacheOrDownloadと同様に
ダウンロードしたものはキャッシュし、
2回目からはダウンロードせずにキャッシュから取得するため処理時間が短くなります。
一応、NCBMのファイルストアでもAssetBundleは使えましたね……!
おわりに
最初に言った通り、NCMBのファイルストア機能はAsset Bundleの配信には適していません。
余談ですが、原理的にはUnityのAssetBundleファイルを置くこともできそうです。
しかしNCMBは所謂CDNではないので、大勢が大きいファイルを一斉にダウンロードするような使い方には向いていないです。
この辺は、ほかサービスとの連携がよさそうですね。
http://blog.mb.cloud.nifty.com/entry/8605
なので、テストで使う程度に留めておき、本運用で使う事は避けましょう。
Asset Bundleの配信適していて、かつ、
NCMBと同じぐらい簡単に使えるサービスが他にあれば良いんですが、
オススメがあれば、ご一報頂けると幸いです(:3っ)∋〜