Exemplo n.º 1
0
        /// <summary>
        /// 异步加载资源
        /// </summary>
        /// <param name="assetKey"></param>
        /// <param name="callback"></param>
        public void LoadAssetAsync(AssetKey assetKey, Action <AssetKey, UnityEngine.Object> callback)
        {
            MDebug.Log(LOG_TAG, $"LoadAssetAsync({assetKey})");
            MDebug.Assert(callback != null, LOG_TAG, "callback != null");

            int assetIndex = (int)assetKey;

            AssetHandler assetHandler = m_AssetHandlers[assetIndex];

            if (assetHandler == null)
            {
                assetHandler = m_AssetHandlerPool.Alloc();
                assetHandler.SetAssetKey(assetKey);
                m_AssetHandlers[assetIndex] = assetHandler;
            }

            AssetAction assetAction = assetHandler.AddReference(callback);

            switch (assetAction)
            {
            case AssetAction.RequestLoadBundle:
                int   bundleIndex            = m_AssetInfos[assetIndex].BundleIndex;
                int[] dependencyBundleIndexs = m_BundleInfos[bundleIndex].DependencyBundleIndexs;
                for (int iBundle = 0; iBundle < dependencyBundleIndexs.Length; iBundle++)
                {
                    int iterDependencyBundleIndex = dependencyBundleIndexs[iBundle];
                    LoadBundleForLoadAsset(iterDependencyBundleIndex, assetIndex);
                }
                LoadBundleForLoadAsset(bundleIndex, assetIndex);

                //全部依赖Bundle加载完成?

                if (assetHandler.GetRemainLoadBundleCount() == 0)
                {
                    AddAssetActionRequest(assetIndex, AssetAction.Load);
                }
                break;

            case AssetAction.Load:
            case AssetAction.LoadedCallback:
                AddAssetActionRequest(assetIndex, assetAction);
                break;

            case AssetAction.Null:
                // Nothing To Do
                break;

            default:
                MDebug.Assert(false, LOG_TAG, "Asset Not Support AssetAction: " + assetAction);
                break;
            }
        }