ぺんたんがゲーム開発やアプリ開発について語る場所

いぬごや

Unity Unity初心者 Unity基礎

【Unity】Android端末でStreamingAssetsからAssetBundleを読み込む方法

更新日:

ちっとも読み込めなくてどえらいハマったので備忘録。
ハマった原因としてはAssetBundle名が大文字だと思い込んでたら実は小文字だったというだけでした…

 

Androidでの読み込み方

何も難しいことはないです。
昔はあれこれ気にすることがあったようですが、今はApplication.streamingAssetsPathとAssetBundle.LoadFromFileで簡単に読めます。

if (Application.platform == RuntimePlatform.Android) {
// Android
string asset_name = “test_asset”;
string bundleUrl = Path.Combine(Application.streamingAssetsPath, asset_name );

AssetBundle assetBundle = AssetBundle.LoadFromFile(bundleUrl);
sprite = assetBundle.LoadAsset<Sprite>(“wepon_sprite”);

//アセットバンドルをアンロード
assetBundle.Unload(false);

GameObject objWepTest = GameObject.Find(“wepon”);
objWepTest.GetComponent<SpriteChange>().ChangeSprite(sprite);
}

 

またはUnityWebRequestで。WWWクラスは古いから(近いうちに消滅するだろうから)使わない。

if (Application.platform == RuntimePlatform.Android) {
// Android
string asset_name = “test_asset”;
string bundleUrl = Path.Combine(Application.streamingAssetsPath, asset_name );

UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(bundleUrl);
yield return request.SendWebRequest();

if (request.isNetworkError || request.isHttpError) {
Debug.Log(“Erro!! ” + request.error);
}

AssetBundle assetBundle = DownloadHandlerAssetBundle.GetContent(request);

sprite = assetBundle.LoadAsset<Sprite>(“wepon_sprite”);

//アセットバンドルをアンロード
assetBundle.Unload(false);

GameObject objWepTest = GameObject.Find(“wepon”);
objWepTest.GetComponent<SpriteChange>().ChangeSprite(sprite);
}

どちらもStreamingAssetからAssetBundle「test_asset」を読み込んで、そのなかから「wepon_sprite」を取り出して「wepon」ゲームオブジェクトのスプライトを差し替えるコードです。

 

ハマった要因

AssetBundle化の対象としたフォルダ名を大文字を含めて作っており(test_Asset)、AssetBundle Browserを使いAssetBundle化したときに勝手に小文字に置き換わっていたが(test_asset)、まったく気づかずにファイルが読み込めなくてハマりました。

Unityに限らず読み込むファイルには大文字を使わないよう気を付けないとダメですな…
分かってはいるけど、ついつい忘れてしまう反省。

 

-Unity, Unity初心者, Unity基礎

Copyright© いぬごや , 2019 All Rights Reserved Powered by STINGER.