1

AssetBundle.LoadAsync を使用して Assets フォルダーからプレハブを直接読み込むことはできますか? Assets/Bundle フォルダーには "BGELement" というプレハブがあります。それを Resources フォルダーに入れず、Resource.Load を使用してロードしたくありませんでした。以下は私のコードですが、エラーが発生します: NullReferenceException、エラー行は ab.LoadAsync() です

 using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {

    void Start () {
        StartCoroutine(NewLoadBGElement ());
    }

    IEnumerator NewLoadBGElement () {
        string path = Application.dataPath + "/Bundle/BGElement";
        AssetBundle ab = new AssetBundle ();
        AssetBundleRequest abr = ab.LoadAsync(path, typeof(GameObject));
        yield return abr;
        GameObject newCube = Instantiate(abr.asset) as GameObject;
    }
}
4

1 に答える 1

2

いいえ、できませんが、ストリーミング アセット フォルダーにアセット バンドルとして配置できます (これを行うには Unity Pro が必要です)。

その後、WWW クラスを使用して、ストリーミング アセット フォルダーからファイルを「ダウンロード」できます。ダウンロードパスの前に必ず「file:\」を追加してください

WWW www = new WWW("file://" + Application.streamingAssetsPath + "/your file");

ファイルをデバイスの永続データ パスにコピーまたはダウンロードする場合は、以下を使用して同じ方法でダウンロードできます。

Application.persistentDataPath

代わりは。

アセットをリアルタイムでアップロードしたい場合は、プレハブを AssetBundle としてエクスポートし、ストリーミング アセット フォルダーに貼り付けることをお勧めします。リアルタイムでアセット バンドルを読み込めるようにする必要があります。アセット バンドルをサーバーに配置して、Web からダウンロードすることもできます。

例:

        public static IEnumerator DownloadFromStreamingAssetsFolder(string assetBundleName)
        {
            WWW file = new WWW("file://" + Application.streamingAssetsPath + assetBundleName);
            yield return file;
            //Do something with your download
        }   
于 2013-11-12T19:18:37.243 に答える