デジタルフロッグ

Unityのアプリの開発をしながらいろいろと忘れないための備忘録でございます。

ローカルのAssetBundleを読み込んで表示させてみよう

karaagedigital.hatenablog.jp

前回書いたアセットバンドルを使ってみようでエクスポートするまでは作りました。

ローカルから読み込む場合には作成したアセットバンドルをStreamingAssetsというフォルダを作ってそこに突っ込んだ方が後々よさそうです。
公式にも書いているのでサッと読んでみてください。

docs.unity3d.com

今回前回作成したものではなく新しくプロジェクトを作成して作りました。

f:id:karaagedigital:20161119160121p:plain

GameViewに表示されているものをプレハブにしてImageFolderというものに突っ込みました。
これを200個同じものを作りすべてAssetBundle名をimageにしました。

アセットバンドルにすると何がどうかっていうとこの画像を見てもらうとわかると思います。

f:id:karaagedigital:20161119160608p:plain

一つ8KBもあるプレハブが200もあるので1.5MBぐらいになるのですが、アセットバンドルにしてしまうと18KBでおさまります。
Textureとかになるとここまで圧縮するのは厳しいですが…
中規模~の開発になるとどうしてもプロジェクトのサイズが大きくなってしまうので出来る限りアセットバンドルにしてしまった方がよさそうです。

作ったimageという名前のアセットバンドルをStreamingAssetsというフォルダを作ってそこに配置してください。

下記スクリプトを作って自分はHierarchyのCanvasにアタッチしました。

using System;
using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class Getbundle : MonoBehaviour {

	// Use this for initialization
	void Start () {
        StartCoroutine(DownLoad()); 
	}

    IEnumerator DownLoad()
    {
        string bundleUrl = Application.streamingAssetsPath + "/image";
        AssetBundleCreateRequest request = AssetBundle.LoadFromFileAsync(bundleUrl);
        while (!request.isDone)
        {
            yield return null;
        }
        AssetBundle assetBundle = request.assetBundle;
        AssetBundleRequest image = assetBundle.LoadAssetAsync<GameObject>("Image 99");
        GameObject obj = (GameObject)Instantiate( image.asset );
        obj.transform.SetParent(transform, false);
        obj.GetComponent<RectTransform>().anchoredPosition = new Vector2(2, 2);
    }
}

今回はImage 99という名前のプレハブを取り出しています。
名前を変えれば他のプレハブを取り出すことも可能です。

ちなみにこれプレハブ全部にアセットバンドル名を付けてますが、格納しているフォルダにアセットバンドル名を設定しておけばそのフォルダの中身がアセットバンドルになるみたいなのでアセットバンドルを作る際はつかいたいものをフォルダに突っ込んでフォルダの名前を設定してエクスポートって形でよさそうです。