/// <summary> /// Asset sync load from AssetBundle; /// </summary> /// <typeparam name="T">ctrl</typeparam> /// <param name="type">资源类型</param> /// <param name="assetName">资源名字</param> /// <returns>ctrl</returns> public T LoadAssetSync <T>(AssetType type, string assetName) where T : Object { T ctrl = null; IAssetLoader <T> loader = CreateLoader <T>(type); AssetBundle assetBundle = AssetBundleMgr.Instance.LoadAssetBundleSync(type, assetName); bool isInstance = false; if (assetBundle != null) { T tempObject = assetBundle.LoadAsset <T>(assetName); ctrl = loader.GetAsset(tempObject, out isInstance); } if (ctrl == null) { LogUtil.LogUtility.PrintError(string.Format("[ResourceMgr]LoadAssetFromAssetBundleSync Load Asset {0} failure!", assetName + "." + type.ToString())); } else { if (isInstance) { var go = ctrl as GameObject; if (go) { UnityUtility.AddOrGetComponent <AssetBundleTag>(go, (tag) =>//自动卸载; { tag.AssetBundleName = assetName; tag.Type = type; tag.IsClone = false; }); } } } return(ctrl); }
/// <summary> /// Asset async load from AssetBundle; /// </summary> /// <typeparam name="T">ctrl</typeparam> /// <param name="type">资源类型</param> /// <param name="assetName">资源名字</param> /// <param name="action">资源回调</param> /// <param name="progress">progress回调</param> /// <returns></returns> public IEnumerator <float> LoadAssetAsync <T>(AssetType type, string assetName, Action <T> action, Action <float> progress) where T : Object { T ctrl = null; AssetBundle assetBundle = null; IAssetLoader <T> loader = CreateLoader <T>(type); IEnumerator itor = AssetBundleMgr.Instance.LoadAssetBundleAsync(type, assetName, ab => { assetBundle = ab; }, null); while (itor.MoveNext()) { yield return(Timing.WaitForOneFrame); } AssetBundleRequest request = assetBundle.LoadAssetAsync <T>(assetName); while (request.progress < 0.99) { if (progress != null) { progress(request.progress); } yield return(Timing.WaitForOneFrame); } while (!request.isDone) { yield return(Timing.WaitForOneFrame); } bool isInstance = false; ctrl = loader.GetAsset(request.asset as T, out isInstance); if (ctrl == null) { LogUtil.LogUtility.PrintError(string.Format("[ResourceMgr]LoadAssetFromAssetBundleSync Load Asset {0} failure!", assetName + "." + type.ToString())); } else { if (isInstance) { var go = ctrl as GameObject; if (go) { UnityUtility.AddOrGetComponent <AssetBundleTag>(go, (tag) =>//自动卸载; { tag.AssetBundleName = assetName; tag.Type = type; tag.IsClone = false; }); } } if (action != null) { action(ctrl); } } }