// Where we actuall call WWW to download the assetBundle.
static protected bool LoadAssetBundleInternal(string assetBundleName, bool isLoadingAssetBundleManifest)
{
#if ENABLE_NDINFRA_DEBUG_INFO
AssetBundleManager.Log(LogType.Info, "LoadAssetBundleInternal assetBundleName=" + assetBundleName);
#endif// ENABLE_NDINFRA_DEBUG_INFO
// Already loaded.
LoadedAssetBundle bundle = null;
#if ENABLE_NDINFRA_CUSTOM
// assetBundleName may be with variant extention, but m_LoadedAssetBundles doesn't
string shortKey = RemovePostVariant(assetBundleName);
m_LoadedAssetBundles.TryGetValue(shortKey, out bundle);
#else
m_LoadedAssetBundles.TryGetValue(assetBundleName, out bundle);
#endif // ENABLE_NDINFRA_CUSTOM
if (bundle != null)
{
bundle.m_ReferencedCount++;
return(true);
}
// @TODO: Do we need to consider the referenced count of WWWs?
// In the demo, we never have duplicate WWWs as we wait LoadAssetAsync()/LoadLevelAsync() to be finished before calling another LoadAssetAsync()/LoadLevelAsync().
// But in the real case, users can call LoadAssetAsync()/LoadLevelAsync() several times then wait them to be finished which might have duplicate WWWs.
if (m_DownloadingWWWs.ContainsKey(assetBundleName))
{
return(true);
}
WWW download = null;
string url = m_BaseDownloadingURL + assetBundleName;
#if ENABLE_NDINFRA_CUSTOM
// start check version
// assetBundleName is with variant extension.
#if ENABLE_NDINFRA_DEBUG_INFO
Debug.LogWarning("LoadAssetBundleInternal input and assemble url=" + url);
#endif // ENABLE_NDINFRA_DEBUG_INFO
string keyWoVariant = RemovePostVariant(assetBundleName);
bool isVersionExist = m_VersionTable.ContainsKey(keyWoVariant);
int targetVersion = 0;
if (isVersionExist)
{
targetVersion = m_VersionTable[keyWoVariant];
}
// check if we need to use local asset bundle
bool isLocalExist = m_LocalBundleTable.ContainsKey(keyWoVariant);
bool isUseLocalBundle = isLocalExist &&
(!isVersionExist || (isVersionExist &&
m_LocalBundleTable[keyWoVariant] >= m_VersionTable[keyWoVariant]));
if (true == isUseLocalBundle)
{
targetVersion = m_LocalBundleTable[keyWoVariant];
isVersionExist = true;
// change path to streaming assets path
url = GetStreamingAssetsPath() + "/AssetBundles/" + Utility.GetPlatformName() + "/" + assetBundleName;
#if ENABLE_NDINFRA_DEBUG_INFO
AssetBundleManager.Log(LogType.Info, "LoadAssetBundleInternal local bundle url=" + url);
#endif // ENABLE_NDINFRA_DEBUG_INFO
}
if (m_EnableVersionCheck && isVersionExist)
{
// url was used here
download = WWW.LoadFromCacheOrDownload(url, targetVersion);
}
else
{
#if ENABLE_NDINFRA_DEBUG_INFO
AssetBundleManager.Log(LogType.Info, "LoadAssetBundleInternal version not exists, beware of caching.");
#endif // ENABLE_NDINFRA_DEBUG_INFO
#endif // ENABLE_NDINFRA_CUSTOM
// For manifest assetbundle, always download it as we don't have hash for it.
if (isLoadingAssetBundleManifest)
{
download = new WWW(url);
}
else
{
download = WWW.LoadFromCacheOrDownload(url, m_AssetBundleManifest.GetAssetBundleHash(assetBundleName), 0);
}
#if ENABLE_NDINFRA_CUSTOM
}
#endif // ENABLE_NDINFRA_CUSTOM
m_DownloadingWWWs.Add(assetBundleName, download);
return(false);
}