Exemplo n.º 1
0
        /// <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);
            }
        }
Exemplo n.º 2
0
        /// <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);
                }
            }
        }