CAssetBundleMgrについて

CMainSystemのAwake内でAddComponentしてください。

アセットバンドルを読み込んだりキャッシュしたりするためのマネージャです。

自前のマネージャを用意するときは、不必要です。

最初に、version.unity3dをダウンロードし、各アセットのバージョンを取得します。

バージョンが異なっているときはローカルにキャッシュされたデータを捨て、ダウンロードしてきます。

次のような特徴を持っています。

  1. アセットバンドルはバージョン管理されており、一度読み込んだものはキャッシュから読み込むようになっている(WWW.LoadFromCacheOrDownload)

  2. 読み込んだアセットバンドルはメモリにキャッシュする

  3. シーン切り替え時に、キャッシュを解放する

  4. 常駐フラグが付いているアセットバンドルは解放せず保持する

  5. Windows,Mac上では設定ファイルによって読み込み先を切り替え可能(ローカルのファイルでも可)

  6. 扱えるアセットバンドルの名前は、 マルチID .unity3dというフォーマットに限る

同時にダウンロードする最大数

この数を超えて、LoadFromCacheOrDownloadを同時に発行しないようになっています。

デフォルト値は、1になっています。

ローカルディスクへの最大キャッシュサイズを指定します。

デフォルト値は、512 * 1024 * 1024(512Mbyte)になっています。

HTTPアドレスを指定します。

デバッグ用パスを指定します。 Windows,Mac環境でのみ有効です。 こちらを指定しておくと、そのパスを優先してファイルを読み込みます。

注釈

デバッグパスを経由して読み込んだファイルは、ローカルディスクへのキャッシュを行いません。

最後に発生したエラー番号が入っています。

最後に発生したエラーメッセージが入っています。

CAssetBundle[] lodings

現在ダウンロード中のアセットバンドルのリストが返ってきます。

ダウンロードをペンディングしているものもこのリストに含まれます。

現在ダウンロード中のアセットバンドルの数が返ってきます。

ダウンロードをペンディングしているものも数に含まれます。

マネージャのインスタンスを取得します。

アセットバンドルを参照します。 もし、キャッシュされていないときは、ダウンロードします。

ダウンロード済みでなくてもアセットバンドルが存在するときは、CAssetBundleを返します。

返ってきたCAssetBundleがダウンロード中かどうかは、CAssetBundle.isLoadedによって判別可能です。

trueの時、使用可能になっています。

nullが返ってくるときは、アセットバンドルがそもそも存在しないときです。

アセットバンドルが存在するかどうか調べます。

呼び出すと、存在するアセットバンドル全てをダウンロードし、ローカルディスクにキャッシュしようとします。

アセットバージョン(version.unity3d)をダウンロードしなおし、アセットバンドルのキャッシュを更新します。

常駐/非常駐に関わらず、全てのアセットバンドルを解放します。

解放後は、loadAssetVersionを呼び出す必要があります。

AssetBundleにキャスト可能です。

保持しているAssetBundleを取得します。

IDを取得します。

trueなら読み込み済みです。

常駐しているかどうか調べます。

ローカルのファイルを読み込む際のパス変更方法

Windows,Mac上でのみ有効です。

最初にAssetsフォルダと同じ場所に次のファイルを作る。

  • config.cf

  • config.local.cf

_images/configpath.png

読み込まれる順番は、config.cf => config.local.cfの順番になります。

後で設定したものが上書きされます。

config.cfに次のように記述しておきます。

#
# config.cf
#
DEBUG_PATH = ../../../unified/AssetBuilder/assetbundles/Windows

CMainSystemのAwake内で次のように設定します。

//==========================================================================
/*!Awake
* @brief    Unity Callback
*/
new void Awake() {
     base.Awake();
     if (m_instance != null) {
         Debug.LogError("already exist CMainSystem");
         return;
     }
     m_instance = this;
     #if !(UNITY_IPHONE || UNITY_ANDROID || UNITY_WEBPLAYER)
         CAssetBundleMgr.debugPath = CConfig.Instance.get ("DEBUG_PATH","../Debug/");
     #endif
     if (KsSoftConfig.UseAssetBundle) {
             gameObject.AddComponent<CAssetBundleMgr>();
         }