(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

適してないと言われたけど、試しにAssetBundleをNCBMのファイルストアで使ってみた【Unity】【AssetBundle】【NCMB】


このエントリーをはてなブックマークに追加

この記事でのバージョン
Unity 2017.2.0f3
NCMB 3.1.0


はじめに

Asset Bundleをサーバーに置いてダウンロードする、というのを試してみようとしてた時に

NCBM(ニフティクラウド mobile backend)のファイルストア機能というものを思い出しました。



これを使えば簡単に実現できそうだと思ったのですが、

残念ながらファイルストア機能はAsset Bundleの配信には適していないようです。

ファイルストア機能はCDNではないため、Unity Asset Bundleを用いたファイルの配信には適しません。

ファイルストア (Unity) : 基本的な使い方 | ニフクラ mobile backend


適していないということは出来なくはない、という事なので物は試しにとやってみました。


なお、NCMBの登録や導入は以下の記事を参照のこと。





アップロード

まずはてきとうにAssetBundleを生成し、


f:id:kan_kikuchi:20171102071912j:plain


それをそのままファイルストアにアップロード


f:id:kan_kikuchi:20171102072120j:plain


これでURL(公開ファイルURL)を取得出来るようになります。


f:id:kan_kikuchi:20171102072217j:plain


ダウンロード

次にアップロードした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回目からはダウンロードせずにキャッシュから取得するため処理時間が短くなります。


f:id:kan_kikuchi:20171102075836g:plain
(処理速度はProcessTimerで計測)


一応、NCBMのファイルストアでもAssetBundleは使えましたね……!


おわりに

最初に言った通り、NCMBのファイルストア機能はAsset Bundleの配信には適していません。

余談ですが、原理的にはUnityのAssetBundleファイルを置くこともできそうです。
しかしNCMBは所謂CDNではないので、大勢が大きいファイルを一斉にダウンロードするような使い方には向いていないです。
この辺は、ほかサービスとの連携がよさそうですね。

http://blog.mb.cloud.nifty.com/entry/8605


なので、テストで使う程度に留めておき、本運用で使う事は避けましょう。


Asset Bundleの配信適していて、かつ、

NCMBと同じぐらい簡単に使えるサービスが他にあれば良いんですが、

オススメがあれば、ご一報頂けると幸いです(:3っ)∋〜