stream | 托管的 Stream 对象。Unity 调用此对象上的 Read()、Seek() 和 Length 属性加载 AssetBundle 数据。 |
crc | 未压缩内容的可选 CRC-32 校验和。 |
managedReadBufferSize | 你可以用它来覆盖 Unity 在加载数据时使用的读缓冲区大小。默认大小为 32KB。 |
AssetBundle 加载的 AssetBundle 对象或对象加载失败时返回 null。
同步从托管的 Stream 加载一个 AssetBundle。
此函数支持任何压缩类型的包。lzma 压缩数据会解压到内存中,而未压缩和块压缩包直接从 Stream 读取。
当校验和不为零时,在加载内容之前,将基于校验和对内容进行对比。如果不匹配,则会引发一个错误。
与 LoadFromStreamAsync 不同,此函数是同步的,仅在加载 AssetBundle 对象后才会返回。
与 LoadFromFile 不同,AssetBundle 的数据是由托管的 Stream 对象提供的。
以下是对 Stream 对象的限制,以优化 AssetBundle 数据加载
为了减少从本机代码到托管代码的调用次数,从 Stream 使用缓冲区大小为 managedReadBufferSize 的缓冲区读取数据。
在加载 AssetBundle 或 bundle 中的任何资产时,请勿释放 Stream 对象。其生命周期应长于 AssetBundle 的生命周期。这意味着在调用 AssetBundle.Unload 之后释放 Stream 对象。
using UnityEngine; using System.Collections; using System; using System.IO;
public class LoadFromStreamExample : MonoBehaviour { void Start() { var fileStream = new FileStream(Application.streamingAssetsPath, FileMode.Open, FileAccess.Read); var myLoadedAssetBundle = AssetBundle.LoadFromStream(fileStream); if (myLoadedAssetBundle == null) { Debug.Log("Failed to load AssetBundle!"); return; }
var prefab = myLoadedAssetBundle.LoadAsset<GameObject>("MyObject"); Instantiate(prefab);
myLoadedAssetBundle.Unload(false); fileStream.Dispose(); } }