/// <summary> /// 加载场景 /// </summary> /// <param name="scenePath"></param> /// <param name="isAdditive"></param> public void LoadScene(string scenePath, bool isAdditive) { LoadSceneMode mode = isAdditive ? LoadSceneMode.Additive : LoadSceneMode.Single; string assetBundleName = mAssetManifest[scenePath]; string[] split = scenePath.Replace('\\', '/').Split('/'); string sceneName = split[split.Length - 1].Replace(".unity", ""); if (!UnityUtility.IsSceneInBuildSetting(sceneName)) { AssetBundle assetBundle = mAssetBundleHelper.LoadAssetBundle(assetBundleName); UnityEngine.SceneManagement.SceneManager.LoadScene(sceneName, mode); mAssetBundleHelper.Unload(assetBundleName); } else { UnityEngine.SceneManagement.SceneManager.LoadScene(sceneName, mode); } }
/// <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); } } }