/// <summary> /// Asset async load from AssetBundle; /// </summary> /// <typeparam name="T">ctrl</typeparam> /// <param name="assetType">资源类型</param> /// <param name="assetName">资源名字</param> /// <param name="proxy">代理</param> /// <param name="action">资源回调</param> /// <param name="progress">progress回调</param> /// <returns></returns> private IEnumerator <float> LoadAssetAsync_discard <T>(AssetType assetType, string assetName, AsyncAssetProxy proxy , Action <T> action, Action <float> progress) where T : Object { T ctrl = null; AssetBundle assetBundle = null; IEnumerator itor = AssetBundleMgr.Instance.LoadAssetBundleAsync(assetType, assetName, ab => { assetBundle = ab; }, progress);//此处加载占90%; while (itor.MoveNext()) { yield return(Timing.WaitForOneFrame); } var name = Path.GetFileNameWithoutExtension(assetName); AssetBundleRequest request = assetBundle.LoadAssetAsync <T>(name); //此处加载占10%; while (request.progress < 0.99) { if (progress != null) { progress(0.9f + 0.1f * request.progress); } yield return(Timing.WaitForOneFrame); } while (!request.isDone) { yield return(Timing.WaitForOneFrame); } ctrl = request.asset as T; if (null == ctrl) { LogHelper.PrintError(string.Format("[ResourceMgr]LoadAssetAsync Load Asset failure," + ",type:{0},name:{1}!", assetType, assetName)); } //-------------------------------------------------------------------------------------- //先等一帧; yield return(Timing.WaitForOneFrame); if (!proxy.IsCancel && action != null) { action(ctrl); } if (proxy != null) { proxy.OnFinish(ctrl); } }
private void LoadObjectFromAssetBundleLoadNode(AsyncAssetProxy proxy) { Object target = null; AssetBundle assetBundle = proxy.LoadNode.assetBundle; target = PoolMgr.Instance.GetUnityAsset(proxy.assetType, proxy.assetName); if (null == target) { var name = Path.GetFileNameWithoutExtension(proxy.assetName); target = assetBundle.LoadAsset(name); } if (target != null) { PoolMgr.Instance.ReleaseUnityAsset(proxy.assetType, proxy.assetName, target); target = PoolMgr.Instance.GetUnityAsset(proxy.assetType, proxy.assetName); } proxy.OnFinish(target); }