IEnumerator OnLoadResourceAsync(ResCallBackData data)
    {
        string          resPath = CommonUtils.RemoveFileExtension(data.filePath);
        ResourceRequest request = null;

        if (data.systemTypeInstance == null)
        {
            request = Resources.LoadAsync(resPath);
        }
        else
        {
            request = Resources.LoadAsync(resPath, data.systemTypeInstance);
        }
        yield return(request);

        int count = loadResTasks.Count;

        for (int i = count - 1; i >= 0; i--)
        {
            ResCallBackData item = loadResTasks[i];
            if (item.filePath == data.filePath)
            {
                item.callBack(data.filePath, request.asset);
                loadResTasks.RemoveAt(i);
            }
        }
        StartLoadResourceAsync();
    }
Example #2
0
    public void LoadAssetAsync(AssetBundle assetBundle, string filePath, OnCallBackSObject callBack, System.Type systemTypeInstance)
    {
        if (assetBundle == null || string.IsNullOrEmpty(filePath))
        {
            if (callBack != null)
            {
                callBack(null, null);
            }
            return;
        }
        if (objectCallBackDic.ContainsKey(filePath) == false)
        {
            objectCallBackDic[filePath] = new List <ResCallBackData>();
        }
        //是否正在任务中
        bool isTaskRunning = objectCallBackDic[filePath].Count > 0;

        ResCallBackData data = new ResCallBackData();

        data.filePath = filePath;
        data.callBack = callBack;

        objectCallBackDic[filePath].Add(data);
        if (isTaskRunning == false)
        {
            StartCoroutine(OnLoadAssetAsync(assetBundle, filePath, systemTypeInstance));
        }
    }
    void StartLoadResourceAsync()
    {
        if (loadResTasks.Count == 0)
        {
            return;
        }
        ResCallBackData data = loadResTasks[0];

        StartCoroutine(OnLoadResourceAsync(data));
    }
    public void LoadResourceAsync(string filePath, OnCallBackSObject callBack, System.Type systemTypeInstance)
    {
        if (string.IsNullOrEmpty(filePath))
        {
            if (callBack != null)
            {
                callBack(null, null);
            }
            return;
        }
        ResCallBackData data = new ResCallBackData();

        data.filePath           = filePath;
        data.callBack           = callBack;
        data.systemTypeInstance = systemTypeInstance;
        loadResTasks.Add(data);

        if (loadResTasks.Count == 1)
        {
            StartLoadResourceAsync();
        }
    }