IEnumerator LoadCoroutine(ResourceInfo resourceInfo, OnResourceLoadFinished callback) { ResourceLoadState = ResourceLoadStateType.Loading; Object resource; if (resourceInfo.isFromAssetBundle) { var assetbundlePath = string.Format("{0}{1}/{2}{3}", Application.streamingAssetsPath, PREFIX_ASSETBUNDLE_PATH, resourceInfo.assetbundlePath, SUFFIX_ASSETBUNDLE_PATH); WWW www = new WWW(assetbundlePath); yield return(www); var bundle = www.assetBundle; var request = bundle.LoadAssetAsync <GameObject>(resourceInfo.resourceName); yield return(request); resource = request.asset; bundle.Unload(false); } else { var request = Resources.LoadAsync(resourceInfo.resourcePath); yield return(request); resource = request.asset; } _resourceDict.Add(resourceInfo.resourceName, resource); LoadAsyncFinished(resource, callback); }
/// <summary> /// 异步加载资源 /// </summary> /// <param name="resourceName">资源名称</param> /// <param name="callback">加载成功的回调</param> public void LoadAsync(string resourceName, OnResourceLoadFinished callback) { var worldMgr = WorldManager.Instance; Object resource; if (_resourceDict.TryGetValue(resourceName, out resource)) { worldMgr.TimerMgr.AddOnce(0, delegate() { // 即使已经加载,也保证下一帧返回 LoadAsyncFinished(resource, callback); }); return; } for (var i = 0; i < _asyncResourceRequestList.Count; i++) { var request = _asyncResourceRequestList[i]; if (request.resourceName == resourceName) { request.callBack += callback; return; } } var resourceRequest = worldMgr.PoolMgr.Get <AsyncResourceRequest>(); resourceRequest.resourceName = resourceName; resourceRequest.callBack = callback; _asyncResourceRequestList.Add(resourceRequest); StartLoadAsync(); }
void LoadAsyncFinished(Object resource, OnResourceLoadFinished callback) { if (callback != null) { callback(resource); } ResourceLoadState = ResourceLoadStateType.Finished; }
public void Clear() { resourceName = string.Empty; callBack = null; }