Beispiel #1
0
    /// <summary>
    /// 加载AB资源
    /// </summary>
    /// <param name="assetName">资源名称</param>
    /// <param name="listener">回调</param>
    /// <param name="isKeepInMemory">是否常驻内存</param>
    /// <param name="isAsync">是否异步</param>
    private void LoadForAB(string assetName, ILoadListener listener, bool isKeepInMemory, bool isAsync)
    {
        if (!mABInfoDic.ContainsKey(assetName))
        {
            if (listener != null)
            {
                listener.LoadFailure(assetName);
            }
            Debug.LogError("这个资源不存在AB里面 资源名称:" + assetName);
            return;
        }
        for (int i = 0; i < mLoadIn.Count; i++)
        {
            if (mLoadIn[i].AssetName == assetName)
            {
                Log.Error("正在加载这个资源 资源名称:" + assetName);
                return;
            }
        }
        for (int i = 0; i < mLoadWait.Count; i++)
        {
            if (mLoadWait.ToArray()[i].AssetName == assetName)
            {
                Log.Error("这个资源已经等待加载了 资源名称:" + assetName);
                return;
            }
        }
        ABInfo abInfo = GetABInfo(assetName);
        ABReq  req    = new ABReq(abInfo.AssetName, abInfo.ABName, listener, isKeepInMemory, isAsync);

        mLoadWait.Enqueue(req);
    }
Beispiel #2
0
    /// <summary>
    /// AB加载完成回调
    /// </summary>
    /// <param name="req"></param>
    private void LoadABFinish(ABReq req)
    {
        AssetBundle assetBundle = req.ABWww.assetBundle;

        // req.WWWDispose();
        if (assetBundle == null)
        {
            if (req.LoadListener != null)
            {
                req.LoadListener.LoadFailure(req.AssetName);
            }
        }
        else
        {
            if (req.IsAsync)
            {
                StartCoroutine(LoadABAsync(assetBundle, req.AssetName, req.LoadListener, req.IsKeepInMemory));
            }
            else
            {
                ABInfo    abInfo = GetABInfo(req.AssetName);
                object    obj    = assetBundle.LoadAsset(abInfo.FullName);
                AssetPack asset  = new AssetPack(abInfo.AssetName, obj, req.IsKeepInMemory);
                if (mAssetPackDic.ContainsKey(asset.AssetName))
                {
                    mAssetPackDic[asset.AssetName] = asset;
                }
                else
                {
                    mAssetPackDic.Add(asset.AssetName, asset);
                }
                req.LoadListener.LoadFinish(obj);
                AddAssetToStackTop(asset.AssetName);
                assetBundle.Unload(false);
            }
        }
    }