1、对于AssetBundle包ab,如果正在异步加载ab,然后立马同步加载ab,则会强制先执行同步加载并正确返回ab,异步加载返回的为空。
AssetBundle ab = null;
AssetBundleCreateRequest abCReq = null;
private void Start()
{
Debug.Log("步骤1");
StartCoroutine(load());
Debug.Log("步骤2");
string abPath = Application.dataPath + "/../assetBundle/windows_svn/_arts_scene_403.unity.k";
ab = AssetBundle.LoadFromFile(abPath);
Debug.Log("同步请求加载好了" + ab.name);
Debug.Log("步骤3");
}
IEnumerator load()
{
Debug.Log("准备异步协程");
string abPath = Application.dataPath + "/../assetBundle/windows_svn/_arts_scene_403.unity.k";
abCReq = AssetBundle.LoadFromFileAsync(abPath);
yield return abCReq;
Debug.Log("异步请求加载好了");
ab = abCReq.assetBundle;
if (ab)
{
Debug.Log("异步取出ab包:" + ab.name);
}
else
{
Debug.Log("异步取出ab包为空");
}
}
2、对于AssetBundle包ab,如果正在异步加载ab,然后立马调用异步加载的AssetBundleCreateRequest对象的assetBundle,则会触发GetAssetBundleBlocking私有方法强制为同步加载。此时异步加载逻辑先获取到ab,再同步加载逻辑返回ab。
AssetBundle ab = null;
AssetBundleCreateRequest abCReq = null;
private void Start()
{
Debug.Log("步骤1");
StartCoroutine(load());
Debug.Log("步骤2");
ab = abCReq.assetBundle;
Debug.Log("强制同步请求加载好了" + ab.name);
Debug.Log("步骤3");
}
IEnumerator load()
{
Debug.Log("准备异步协程");
string abPath = Application.dataPath + "/../assetBundle/windows_svn/_arts_scene_403.unity.k";
abCReq = AssetBundle.LoadFromFileAsync(abPath);
yield return abCReq;
Debug.Log("异步请求加载好了");
ab = abCReq.assetBundle;
if (ab)
{
Debug.Log("异步取出ab包:" + ab.name);
}
else
{
Debug.Log("异步取出ab包为空");
}
}