ちっとも読み込めなくてどえらいハマったので備忘録。
ハマった原因としては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に限らず読み込むファイルには大文字を使わないよう気を付けないとダメですな…
分かってはいるけど、ついつい忘れてしまう反省。