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(); }
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(); } }