UnityのAssetBundleを利用してスマホ向けゲームを製作しています。
AssetBundleの作成・ダウンロード・素材を取り出して適用、という一連の流れは実装出来ました。
ただ、旧式の端末ではメモリの使用量が多すぎでクラッシュする場合があります。
Profiler等で確認してみると、元々Project内にインポートしていた素材を使用する時に比べて、
メモリの使用量が遥かに(10倍〜100倍近く)大きくなっていることが分かりました。
AssetBundleからの展開時にメモリを消費するのは分かりますが、
こんなにも大きくなるものなのか? 何か間違っているのではないか? と疑問に思っています。
問題点の指摘・解決方法等ありましたら教えて頂きたいです。
■AssetBundle作成時
BuildAssetBundleOptions.ChunkBasedCompressionを指定
■素材
テクスチャファイル:2048x2048pxの画像を何枚か
(この時点でファイルが大きいことは確かなのですが、AssetBundleを使わずProject内ファイルを利用した場合はメモリオーバーフローを起こさないので、原因はAssetBundleだと思います)
■展開方法
「AssetBundleの暗号化について図でまとめてみた - Qiita」のアプローチ3を使用
■AssetBundleからSpriteを取得する処理
C#
1public Sprite GetSprite(string assetName) 2{ 3//assetBundleCache はList<AssetBundle>です。起動時(AssetBundleダウンロード時)に生成しています。 4 5 if (assetBundleCache == null) { 6 return null; 7 } 8 9 Sprite result = null; 10 foreach (var item in assetBundleCache) { 11 if (item != null) { 12 result = item.LoadAsset<Sprite> (assetName); 13 if (result != null) { 14 break; 15 } 16 } 17 } 18 19 return result; 20} 21 22//実際に画像を適用するスクリプト 23Image image = gameObject.GetComponent<Image>(); 24image.sprite = GetSprite("hoge"); 25
■開発環境
Unity 5.4.4f1
Mac 10.12.1
あなたの回答
tips
プレビュー