Пример #1
0
    /// <summary>
    /// 移除数据AB对象,释放WWW
    /// </summary>
    /// <param name="path"></param>
    /// <param name="isForceUnload">是否强制Unload。强制释放,不计数引用计数</param>
    /// <param name="unloadUsedObjects">是否Unload 所有资源 包括正在使用的</param>
    public void RemoveAssetBundle(string path, bool isForceUnload = false, bool unloadUsedObjects = false)
    {
        if (this._dataList == null || !this._dataList.ContainsKey(path))
        {
            return;
        }

        VOAssetInfo resInfo = this._dataList[path];

        if (resInfo != null)
        {
            if (LoadThreadManager.showDebug)
            {
                Log.info("ResDataManager::RemoveAssetBundle 清除资源!path " + path);
            }
            // 释放引用的资源
            if (resInfo.www != null && resInfo.www.assetBundle != null)
            {
                resInfo.www.assetBundle.Unload(unloadUsedObjects);
            }
            resInfo.Dispose();
            resInfo = null;
        }
        this._dataList.Remove(path);
    }
Пример #2
0
    /// <summary>
    /// 直接加载Audio的获取方式
    /// </summary>
    /// <param name="path"></param>
    /// <param name="isClear"></param>
    /// <returns></returns>
    public AudioClip GetAudioClip(string path, bool isClear = true)
    {
        #region 走本地读取
        if (!ResLoadTool.isByWWWLoad && this._editorDataDict.ContainsKey(path))
        {//如果是Bytes
            if (ResTypeEnum.AUDIO == GetResType(path))
            {
                AudioClip audio = this._editorDataDict[path] as AudioClip;
                return(audio);
            }
        }
        #endregion
        if (this._dataList == null || !this._dataList.ContainsKey(path))
        {
            return(null);
        }

        VOAssetInfo resInfo = this._dataList[path];
        AudioClip   clip    = null;
        if (resInfo != null)
        {
            clip = resInfo.www.audioClip;
            if (isClear)
            {
                this.RemoveAssetBundle(path, true);
            }
        }
        return(clip);
    }
Пример #3
0
    /// <summary>
    /// 直接加载txt 获取字符串
    /// </summary>
    /// <param name="path"></param>
    /// <param name="isClear"></param>
    /// <returns></returns>
    public string GetDataText(string path, bool isClear = true)
    {
        #region 走本地读取
        if (!ResLoadTool.isByWWWLoad && this._editorDataDict.ContainsKey(path))
        {//如果是文本
            if (ResTypeEnum.TEXT == GetResType(path))
            {
                TextAsset txtAsset = this._editorDataDict[path] as TextAsset;
                if (txtAsset != null)
                {
                    this._editorDataDict.Remove(path);
                    return(txtAsset.text);
                }
            }
        }
        #endregion
        if (this._dataList == null || !this._dataList.ContainsKey(path))
        {
            return("");
        }

        string data = "";

        VOAssetInfo resInfo = this._dataList[path];
        if (resInfo != null)
        {
            data = resInfo.www.text;
            if (isClear)
            {
                this.RemoveAssetBundle(path, true);
            }
        }
        return(data);
    }
Пример #4
0
    /// <summary>
    /// 加载完成后操作
    /// </summary>
    /// <param name="resLoader"></param>
    /// <param name="www"></param>
    private void LoaderOperater(ResLoader resLoader, WWW www)
    {
        if (resLoader == null)
        {
            return;
        }

        ResLoaderOrder resLoaderOrder = this.GetWwwLoaderOrderByOrderName(resLoader.ownerId);

        if (resLoaderOrder == null)
        {
            return;
        }
        bool existsStatus = ResDataManager.instance.ExistWWWData(resLoader.stResPath.path);

        if (!existsStatus)
        {
            VOAssetInfo resInfo = new VOAssetInfo(www, resLoader.stResPath.path, resLoader.stResPath.tag);
            if (www != null)
            {
                ResDataManager.instance.InsertWWWData(resInfo);
            }
            else
            {
                if (LoadThreadManager.showDebug)
                {
                    Log.info("ResLoaderManager::InsertWWWData www is Null!!");
                }
            }
        }
        //刷新队列加载情况
        resLoaderOrder.UpdateLoaderOrderState(resLoader.stResPath);
        //加载完成,析构resLoader,解除loaderItem监听
        resLoader.UnLoader(this.OnProgressHandler, this.OnCompleteHandler, this.OnErrorHandler, false);
        //更新当前队列进度
        UpdateListProgressHanler(resLoaderOrder);
        //触发单个文件完成
        resLoaderOrder.InvokeLoaderFileComplete(resLoader.stResPath.path);
        //如果队列完成通知结束
        if (resLoaderOrder.IsFinished())
        {
            this._orderList.Remove(resLoaderOrder);
            resLoaderOrder.InvokeLoaderListComplete();
            resLoaderOrder.Dispose();
            resLoaderOrder = null;
        }
        //next
        LoadThreadManager.instance.CheckQueue();
    }
Пример #5
0
    /// <summary>
    /// 获取资源tag
    /// </summary>
    /// <param name="path"></param>
    /// <returns></returns>
    private ResTag GetResTagByPath(string path)
    {
        if (this._dataList == null || !this._dataList.ContainsKey(path))
        {
            return(ResTag.None);
        }

        VOAssetInfo resInfo = this._dataList[path];

        if (resInfo != null)
        {
            return(resInfo.tag);
        }
        return(ResTag.None);
    }
Пример #6
0
 /// <summary>
 /// 添加数据到缓存
 /// </summary>
 /// <param name="wwwData">Www data.</param>
 public void InsertWWWData(VOAssetInfo resInfo)
 {
     if (resInfo == null)
     {
         if (LoadThreadManager.showDebug)
         {
             Log.info("ResDataManager::InsertWWWData  resInfo is Null!");
         }
         return;
     }
     if (LoadThreadManager.showDebug)
     {
         Log.info("ResDataManager::InsertWWWData " + resInfo.path);
     }
     this._dataList.Add(resInfo.path, resInfo);
 }
Пример #7
0
    /// <summary>
    /// 获取 AssetBundle 对象 (不对外公开此方法)
    /// </summary>
    /// <returns>The data asset bundle.</returns>
    /// <param name="path">Path.</param>
    /// <param name="loaderTypeEnum">Loader type enum.</param>
    private AssetBundle GetDataAssetBundle(string path)
    {
        if (this._dataList == null || !this._dataList.ContainsKey(path))
        {
            //if (LoadThreadManager.showDebug) Log.info("ResDataManager:: dataList containsKey is False, key:" + path);
            return(null);
        }

        VOAssetInfo resInfo = this._dataList[path];

        if (resInfo != null)
        {
            if (resInfo.www == null)
            {
                //if (LoadThreadManager.showDebug) Log.info("ResDataManager:: resInfo.www is Null!");
                return(null);
            }
            return(resInfo.www.assetBundle);
        }
        //if (LoadThreadManager.showDebug) Log.info("ResDataManager:: resInfo is Null!");
        return(null);
    }
Пример #8
0
    /// <summary>
    /// 直接加载bytes 获取 Bytes 对象
    /// </summary>
    /// <param name="path"></param>
    /// <param name="isClear"></param>
    /// <returns></returns>
    public byte[] GetDataBytes(string path, bool isClear = true)
    {
        #region 走本地读取
        if (!ResLoadTool.isByWWWLoad && this._editorDataDict.ContainsKey(path))
        {//如果是Bytes
            if (ResTypeEnum.BTYES == GetResType(path))
            {
                TextAsset txtAsset = this._editorDataDict[path] as TextAsset;
                if (txtAsset != null)
                {
                    byte[] bytesTmp = new byte[txtAsset.bytes.Length];
                    Array.Copy(txtAsset.bytes, 0, bytesTmp, 0, txtAsset.bytes.Length);
                    this._editorDataDict.Remove(path);
                    return(bytesTmp);
                }
            }
        }
        #endregion
        if (this._dataList == null || !this._dataList.ContainsKey(path))
        {
            return(null);
        }

        byte[]      bytesNew = null;
        VOAssetInfo resInfo  = this._dataList[path];
        if (resInfo != null)
        {
            bytesNew = new byte[resInfo.www.bytes.Length];
            Array.Copy(resInfo.www.bytes, 0, bytesNew, 0, resInfo.www.bytes.Length);
            if (isClear)
            {
                this.RemoveAssetBundle(path, true);
            }
        }
        return(bytesNew);
    }