この記事は以前紹介したDLCをBasic環境でも使えるようにするための機能について。
tsubakit1.hateblo.jp
パッケージ
https://dl.dropbox.com/u/56297224/UnitySumple2/download%20assets.unitypackage
■プレハブの準備
まずはダウンロード時に参照するプレハブを用意する。
プレハブの例。URL先のファイルが映っている。
手順はこんな感じ。
1.適当なフォルダを選択し、
[右クリック]>[Create]>[Cerate TexturePrefub]を選択2.作成したDownloadTextureAssetを選択し、
URLにダウンロードする画像URLを入力3.ハッシュコードに適当な値を入力
これで、画像のダウンロードが始まったら成功。
テキストの場合は、[Create TextPrefub] を、AssetBundle の場合は [Create AssetBundlePrefub] を選択する。
ちなみにハッシュコードが保存されている物と異なる場合、ファイルを再ダウンロードし上書きする。バージョン番号で管理するよりこっちのほうが使いやすかった。
■ファイルのダウンロード&キャッシュ
次にファイルをダウンロードしキャッシュする方法について。
以下のコードを適当な場所で実行する。
ちなみに?が呼ばれるのはダウンロードが終了しファイルがキャッシュされた後。Downloadは非同期的にで動くので、ダウンロード直後に云々したい場合はこのタイミングで何か処理を加えておくと吉。
[SerializeField] DownloadTextureAsset asset;
// 中略
void Start(){
StartCoroutine (asset.Download (() =>
{
// ? ダウンロード完了の通知処理でも書く
}));
}
一応StartCoroutineを自身のmonoで実行するので、stopCoroutineで処理を停止出来る。
ただその場合、インスタンスを再度用意しないと動かないので注意。
(リセット付けようかな)
■ダウンロードしたコンテンツの読込
次はダウンロードしたコンテンツの読込について。
テクスチャの場合は、下の感じで書く。このtextureにダウンロードしたテクスチャが入っている。
一応、非同期動作なのでイベント駆動にしてある。(実は3系だと強引に同期読みが出来たが、4系だと無理になった模様)
asset.LoadTexture(this, (texture) =>
{
guiTexture.texture = texture; // サンプルとしてguiTextureに突っ込んでみる
});
ちなみに AssetBundleは読込み時にLoadAndCacheを実行する場合、ダウンロード後にキャッシュを展開する。この方がロード時間短縮&かつ省メモリになるが、アプリサイズが増大する。逆にLoadWithoutCache はメモリ消費(前者と比較して大)&ロード時間長となるが、アプリサイズは節約できる。ケースバイケースで使い分けるが吉。
なおCaching.maximumAvailableDiskSpaceを設定しておけば、AssetBundleのキャッシュサイズが一定容量に達した時にキャッシュを"使わない順"に削除してくれる。
■破棄
リソースのアンロードはUnload()を呼ぶかDownloadTextureAssetオブジェクトを破棄する。これはDownloadTextureAssetのみ対応。(他はStringとAssetBundleなので)
ファイルの破棄はasset.DeleteFile();で行う。
要望とか意見は大歓迎。要望はコメント欄に書くか@tsubaki_t1にメッセージを投げくれると嬉しい。
ただ要望が多い場合はソース付をオープンソース化(GPL)するか、AssetBundleで$10くらいでソース付きを出そうかなとか考え中。(皮算用)
ソース付き(有料)とDLLのみ(無料or低価格)スタイルって定着しないかなぁ
ついでにこのアセットの良い名前募集中