示例#1
0
    IEnumerator IELoadSceneAsync(Action <UnityEngine.Object, LoadEventData> loadComplete, LoadEventData evData)
    {
        var bRequest = AssetBundle.LoadFromFileAsync(PackagePath);

        IsLoading = true;

        yield return(bRequest);

        var abRequest = bRequest.assetBundle;

        if (abRequest == null)
        {
            yield break;
        }
        if (!bRequest.isDone)
        {
            yield break;
        }

        _bundle = abRequest;

        IsLoading = false;

        if (loadComplete != null)
        {
            loadComplete(_bundle, evData);
        }
    }
示例#2
0
 public void LoadSceneAsync(Action <UnityEngine.Object, LoadEventData> loadComplete, LoadEventData evData)
 {
     if (_bundle != null)
     {
         if (loadComplete != null)
         {
             loadComplete(_bundle, evData);
         }
     }
     else
     {
         CoroutineManager.Instance.StartCoroutine(IELoadSceneAsync(loadComplete, evData));
     }
 }
示例#3
0
    private IEnumerator IELoadAssetAsync(string assetName, Action <UnityEngine.Object, LoadEventData> loadComplete, LoadEventData evData)
    {
        Debug.Log("name " + assetName);
        var ab = _bundle.LoadAssetAsync <UnityEngine.Object>(assetName);

        yield return(ab);

        // 添加资源缓存
        AddRes(assetName, ab.asset);

        if (!_loadCompleteDict.ContainsKey(assetName))
        {
            yield break;
        }

        var callbackList     = _loadCompleteDict[assetName];
        var callbackDataList = _loadEvDataDic[assetName];

        for (int i = 0; i < callbackDataList.Count; i++)
        {
            LoadCallback(callbackList[i], GetAsset(assetName), callbackDataList[i]);
            //在加载缓存的时候还存在问题,_loadCompleteDict里面Key不知道怎么会少了一个,如果解决就可以去掉注释
            //yield return 0;
            callbackList[i] = null;
        }

        callbackList     = _loadCompleteDict[assetName];
        callbackDataList = _loadEvDataDic[assetName];
        var needDelete = callbackList.TrueForAll(c => c == null);

        if (needDelete)
        {
            _loadCompleteDict.Remove(assetName);
        }
    }
示例#4
0
    private IEnumerator IELoadBundleAsync(string assetName, Action <UnityEngine.Object, LoadEventData> loadComplete, LoadEventData evData)
    {
        bool isLoadCache = false;

        if (!IsLoadPackage)
        {
            var bRequest = AssetBundle.LoadFromFileAsync(PackagePath);

            IsLoading = true;

            yield return(bRequest);

            var abRequest = bRequest.assetBundle;

            if (abRequest == null)
            {
                yield break;
            }
            if (!bRequest.isDone)
            {
                yield break;
            }

            _bundle = abRequest;

            IsLoading = false;

            // 加载缓存资源
            isLoadCache = _cacheAssetNameList.Count > 0;
        }

        if (IsUI || IsForverBundle)
        {
            RGLog.DebugResLoad("<color=red>LoadUI</color> {0}", _packageName);
            if (loadComplete != null)
            {
                loadComplete(_bundle, evData);
            }
        }
        else
        {
            CoroutineManager.Instance.StartCoroutine(IELoadAssetAsync(assetName, loadComplete, evData));
            yield return(0);
        }

        // 加载缓存
        CoroutineManager.Instance.StartCoroutine(LoadCache());

        yield return(null);
    }
示例#5
0
    public void LoadAssetAsync(string assetName, Action <UnityEngine.Object, LoadEventData> loadComplete, LoadEventData evData)
    {
        // 先查找资源是否加载过,如果加载过资源就直接返回
        RGRes res = FindRes(assetName);

        if (res != null)
        {
            var asset = GetAsset(assetName);
            loadComplete(asset, evData);
            return;
        }

        AddCallback(assetName, loadComplete, evData);

        CoroutineManager.Instance.StartCoroutine(IELoadAssetAsync(assetName, loadComplete, evData));
    }
示例#6
0
    public void LoadBundleAsync(string assetName, Action <UnityEngine.Object, LoadEventData> loadComplete, LoadEventData evData)
    {
        // 先检查包是否存在
        if (!File.Exists(PackagePath))
        {
            RGLog.Error("<color=red>LoadBundleAsync</color> PackagePath not exits!!! -> <color=yellow>{0}</color>", PackagePath);

            if (loadComplete != null)
            {
                loadComplete(null, evData);
            }

            return;
        }

        if (IsLoading)
        {
            AddCache(assetName, loadComplete, evData);

            RGLog.Debug("<color=green>Bundle Loading ! Add Cache {0} -> {1}</color>", _packageName, assetName);
        }
        else
        {
            AddCallback(assetName, loadComplete, evData);

            CoroutineManager.Instance.StartCoroutine(IELoadBundleAsync(assetName, loadComplete, evData));
        }
    }