umiyuki / AssetBundleManager

AssetBundle周りの処理を個人的にわかりやすく、使いやすくまとめたものです。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

AssetBundleManager

含まれている機能

  • AssetBundleのダウンロード・差分更新
  • AssetBundleビルド時に圧縮形式の選択(LZMA, LZ4, 非圧縮)
  • AESによるAssetBundleの暗号化・復号化

プロジェクトの概要

AssetBundleに関する必要な処理をまとめたサンプルプロジェクトです。   DownloadSceneAssetBundleSceneの2シーン構造です。 DownloadSceneでサーバからAssetBundleをダウンロード後、AssetBundleSceneで取得したアセットを表示します。
※サンプルでダウンロードするAssetBundleにユニティちゃんアセットを使用しています。

使い方

初期設定

初回にInitializeをコールし、AssetBundleが含まれるサーバ上のディレクトリとAssetBundleのバージョンを指定します。 バージョン指定は任意です。 一度設定すれば以降、値の変更しない限り設定する必要はありません。

AssetBundleManager.Initialize (bundleDirURL, 1);


AssetBundleのダウンロード

DownloadAssetBundleでダウンロードするAssetBundle名を指定します。
コールバックデリゲートでダウンロードの進捗値を取得できます。

string[] bundleNames = { bundle_1, bundle_2, bundle_3 };
AssetBundleManager.DownloadAssetBundle (bundleNames, ((float progress, int fileIndex, bool isComplete, string error) => {
    // エラー処理
    if (error != null) {
        Debug.Log("ダウンロードエラー");
    }
    // 進捗処理
    else if (isComplete) {
        Debug.Log("ダウンロード完了");
    }
    else {
        int per = (int)(progress*100f);
        Debug.Log(per+"%");
        Debug.LoG(fileIndex + "/" + bundleNames.Length);
    }
}));

AssetBundleのロード

LoadAssetBundleでロードするAssetBundle名を指定します。
ロードの完了通知はコールバックデリゲートで受け取れます。

string[] bundleNames = { bundle_1, bundle_2 };
AssetBundleManager.LoadAssetBundle (bundleNames, ((bool isSuccess, string error) => {
   if (isSuccess) {
       Debug.Log("ロード成功");
    }
    else {
       Debug.Log("ロード失敗 : "+error);
    }
}));

アセットの取得

ロードしたAssetBundleから必要なアセットを取得するにはGetAssetに取得したいアセット名と、それが含まれるAssetBundle名をしていします。
取得したアセットはObject型なので適当な型にキャストします。

型指定なし

Object obj = AssetBundleManager.GetAsset (bundleName, assetName);

ジェネリック型指定

AudioClip clip = AssetBundleManager.GetAsset<AudioClip> (bundleName, assetName);

非同期

GetAssetAsync (bundleName, assetName, ((Object asset, bool isSuccess) => {
   if (isSuccess) {
       Instantiate ((GameObject)asset, Vector3.zero, Quaternion.identity);
   }
}));

ロードされているAssetBundleを確認する

GetAllAssetBundleNameで現在ロードされているAssetBundleをstring配列で全て取得できます。

string[] bundles = GetAllAssetBundleName();

AssetBundleを破棄する

ロードしたAssetBundleは明示的に破棄するまでメモリに保持され続けるため、不要になったAssetBundleはUnloadで破棄する必要があります。

AssetBundleManager.Unload();

AssetBundle名を指定して個別に破棄することも可能です。

AssetBundleManager.Unload(bundleName);

暗号化したAssetBundleをビルドする

Unityのメニューバー AssetBundles/Open Config を選択し、暗号化のためのキー文字列を設定します。
Saltは8文字以上である必要があります。
Imgur

キー文字列の設定後、AssetBundles/Enable AES Cryption にチェックをつけて Build AssetBundles でビルドします。
Imgur

暗号化されたAssetBundleもダウンロード時に自動的に復号され、通常のAssetBundleと同等に扱うことができます。


リリースノート

- 2018/3/26

  • エディタメニューのEnable AES Cryptionのチェックがビルドをする度に外れる問題を修正

- 2018/1/29

  • AESによるAssetBundleの暗号化機能の追加

- 2017/11/2

  • Unity2017.1以降のバージョンでCaching.ClearAllCachedVersionsを追加

- 2017/11/1

  • AssetBundleManagerをstaticクラスへ変更
    前回のバージョンから使用されていた場合はInstanceを外してください。

- 2017/10/30

  • AssetBundleのダウンロード処理をWWWからUnityWebRequestへ変更

  • Initializeのバージョンを任意指定へ変更
    指定しない場合のバージョンはデフォルトで 1 です。

  • AssetBundleビルド時に圧縮方法をメニューに追加
    Build AssetbundlesにLZMA、LZ4、UnCompress(非圧縮)の3項目を追加しました。

- 2017/8/4

  • Unity2017対応
    errorチェック処理をIsNullOrEmptyでの判定に変更。

- 2016/8/3

  • GetAssetの戻り値をジェネリック型で指定できるオーバーロードメソッドの追加
    GetAssetで取得できるオブジェクトを型指定できるようになりました。
    取得したオブジェクトを各型にキャストする必要がなくなります。

  • 型指定なしのGetAssetの戻り値をUnityEngine.Objectへ変更

- 2016/1/28

  • オーバーロードメソッドの追加
    DonwloadAssetBundleとLoadAssetBundleに配列ではないstring変数として引数に渡すことができるオーバーロードメソッドを追加しました。
    これにより単一のAssetBundleの読み込みがより効率化します。

  • 初期化チェック
    AssetBundleManagerのメソッドをコールしたタイミングで初期化チェックが行われるようになりました。 初期化が行われずに各メソッドが実行された場合は警告がコンソールに出力されます。

- 2015/10/27

  • CRCを照合して更新されたAssetBundleのみをダウンロードされる機能の追加
    AssetBundleのビルド時に生成される.manifestファイルをAssetBundle本体と併せて同ディレクトリに置くことで、AssetBundleのダウンロード実行時に更新されたAssetBundleのみをダウンロードされるように改修しました。
    指定ディレクトリに.manifestファイルがない場合は以前の通りCRCの照合なしで実行されます。

ビルド環境

Unity 2017.3.0p3
macOS High Sierra 10.13.3



Unity-Chan ライセンス

本リポジトリには、UnityChanがAssetsとして含まれています。 以下のライセンスに従います。

ユニティちゃんライセンス

このアセットは、『ユニティちゃんライセンス』で提供されています。このアセットをご利用される場合は、『キャラクター利用のガイドライン』も併せてご確認ください。

About

AssetBundle周りの処理を個人的にわかりやすく、使いやすくまとめたものです。


Languages

Language:C# 88.9%Language:ShaderLab 11.1%