コード例 #1
0
    public IEnumerator MonoLoadByAssetsBundleAsync(string path, AssetBundleLoadCallBack callback)
    {
        AssetBundleCreateRequest status = AssetBundle.LoadFromFileAsync(path);
        LoadState loadState             = new LoadState();

        while (!status.isDone)
        {
            loadState.UpdateProgress(status);
            callback(loadState, null);

            yield return(0);
        }

        status.assetBundle.name = path;
        loadState.UpdateProgress(status);
        callback(loadState, status.assetBundle);
    }
コード例 #2
0
        /// <summary>
        // 异步加载
        /// </summary>
        /// <param name="abName"></param>
        /// <param name="callFun"></param>
        private AssetBundleObject LoadAssetBundleAsync(string abName, AssetBundleLoadCallBack callFun)
        {
            AssetBundleObject obj = null;

            var status = GetobjStatus(abName);

            //  未加载过
            if (status == objStatus.None)
            {
                obj = Createobj(abName);

                obj.CallFunList.Add(callFun);

                // 移入准备队列
                PutobjInQueue(objStatus.Ready, obj);

                return(obj);
            }

            obj = GetobjFromQueue(abName);

            if (obj == null)
            {
                Debug.Log("obj no found!!! -> " + abName);

                return(null);
            }

            DoDependsRef(obj);

            if (status == objStatus.Loaded) // 已加载
            {
                callFun?.Invoke(obj.AssetBundle);
            }
            else
            {
                obj.CallFunList.Add(callFun);
            }

            return(obj);
        }
コード例 #3
0
    public IEnumerator MonoLoadByAssetsBundleAsync(string path, AssetBundleLoadCallBack callback)
    {
#if !UNITY_WEBGL
        AssetBundleCreateRequest status = AssetBundle.LoadFromFileAsync(path);
        LoadState loadState             = new LoadState();

        while (!status.isDone)
        {
            loadState.UpdateProgress(status);
            callback(loadState, null);

            yield return(0);
        }
        if (status.assetBundle != null)
        {
            status.assetBundle.name = path;
        }

        loadState.UpdateProgress(status);
        callback(loadState, status.assetBundle);
#else
        WWW       www       = new WWW(path);
        LoadState loadState = new LoadState();

        while (!www.isDone)
        {
            loadState.UpdateProgress(www);
            callback(loadState, null);

            yield return(0);
        }
        if (www.assetBundle != null)
        {
            www.assetBundle.name = path;
        }

        loadState.UpdateProgress(www);
        callback(loadState, www.assetBundle);
#endif
    }
コード例 #4
0
 public void MonoLoadAssetsBundleMethod(string path, AssetBundleLoadCallBack callback)
 {
     StartCoroutine(MonoLoadByAssetsBundleAsync(path, callback));
 }
コード例 #5
0
 /// <summary>
 /// 异步加载单个assetsbundle
 /// </summary>
 /// <param name="path"></param>
 /// <param name="callback"></param>
 public static void AssetsBundleLoadAsync(string path, AssetBundleLoadCallBack callback)
 {
     GetInstance().MonoLoadAssetsBundleMethod(path, callback);
 }
コード例 #6
0
 /// <summary>
 /// 异步加载
 /// </summary>
 /// <param name="abName"></param>
 public void LoadAsync(string abName, AssetBundleLoadCallBack callFun)
 {
     LoadAssetBundleAsync(abName, callFun);
 }
コード例 #7
0
ファイル: AssetLoadMgr.cs プロジェクト: clk664251332/xluaTest
    private AssetBundleObject LoadAssetBundleAsync(string _hashName, AssetBundleLoadCallBack _callFun)
    {
        AssetBundleObject abObj = null;

        if (_loadedABList.ContainsKey(_hashName)) //已经加载
        {
            abObj = _loadedABList[_hashName];
            DoDependsRef(abObj);
            _callFun(abObj._ab);
            return(abObj);
        }
        else if (_loadingABList.ContainsKey(_hashName)) //在加载中
        {
            abObj = _loadingABList[_hashName];
            DoDependsRef(abObj);
            abObj._callFunList.Add(_callFun);
            return(abObj);
        }
        else if (_readyABList.ContainsKey(_hashName)) //在准备加载中
        {
            abObj = _readyABList[_hashName];
            DoDependsRef(abObj);
            abObj._callFunList.Add(_callFun);
            return(abObj);
        }

        //创建一个加载
        abObj           = new AssetBundleObject();
        abObj._hashName = _hashName;

        abObj._refCount = 1;
        abObj._callFunList.Add(_callFun);

        //加载依赖项
        string[] dependsData = null;
        if (_dependsDataList.ContainsKey(_hashName))
        {
            dependsData = _dependsDataList[_hashName];
        }

        if (dependsData != null && dependsData.Length > 0)
        {
            abObj._dependLoadingCount = dependsData.Length;

            foreach (var dpAssetName in dependsData)
            {
                var dpObj = LoadAssetBundleAsync(dpAssetName,
                                                 (AssetBundle _ab) =>
                {
                    if (abObj._dependLoadingCount <= 0)
                    {
                        string errormsg = string.Format("LoadAssetbundle depend error ! assetName:{0}", _hashName);
                        Debug.LogError(errormsg);
                        return;
                    }

                    abObj._dependLoadingCount--;

                    //依赖加载完
                    if (abObj._dependLoadingCount == 0 && abObj._request != null && abObj._request.isDone)
                    {
                        DoLoadedCallFun(abObj);
                    }
                }
                                                 );

                abObj._depends.Add(dpObj);
            }
        }

        if (_loadingABList.Count < MAX_LOADING_COUNT) //正在加载的数量不能超过上限
        {
            DoLoad(abObj);

            _loadingABList.Add(_hashName, abObj);
        }
        else
        {
            _readyABList.Add(_hashName, abObj);
        }

        return(abObj);
    }
コード例 #8
0
ファイル: AssetLoadMgr.cs プロジェクト: clk664251332/xluaTest
    //异步加载(已经加载直接回调),每次加载引用计数+1
    public void LoadAsync(string _assetName, AssetBundleLoadCallBack callFun)
    {
        string hashName = GetHashName(_assetName);

        LoadAssetBundleAsync(hashName, callFun);
    }
コード例 #9
0
 /// <summary>
 /// 异步加载单个assetsbundle
 /// </summary>
 /// <param name="path"></param>
 /// <param name="callback"></param>
 public static void AssetsBundleLoadAsync(string path, AssetBundleLoadCallBack callback)
 {
     GetInstance().MonoLoadAssetsBundleMethod(path, callback);
 }
コード例 #10
0
    public IEnumerator MonoLoadByAssetsBundleAsync(string path, AssetBundleLoadCallBack callback)
    {
        AssetBundleCreateRequest status = AssetBundle.LoadFromFileAsync(path);
        LoadState loadState = new LoadState();

        while (!status.isDone)
        {
            loadState.UpdateProgress(status);
            callback(loadState, null);

            yield return 0;
        }

        status.assetBundle.name = path;
        loadState.UpdateProgress(status);
        callback(loadState, status.assetBundle);
    }
コード例 #11
0
 public void MonoLoadAssetsBundleMethod(string path, AssetBundleLoadCallBack callback)
 {
     StartCoroutine(MonoLoadByAssetsBundleAsync(path, callback));
 }