12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- using UnityEngine.SceneManagement;
- namespace VEngine
- {
- public class BundledScene : Scene
- {
- protected Dependencies dependencies;
- protected override void OnUpdate()
- {
- if (status == LoadableStatus.DependentLoading)
- UpdateDependencies();
- else if (status == LoadableStatus.Loading) UpdateLoading();
- }
- private void UpdateDependencies()
- {
- if (dependencies == null)
- {
- Finish("dependencies == null");
- return;
- }
- progress = dependencies.progress * 0.5f;
- if (!dependencies.isDone) return;
- var assetBundle = dependencies.assetBundle;
- if (assetBundle == null)
- {
- Finish("assetBundle == null");
- return;
- }
- operation = SceneManager.LoadSceneAsync(sceneName, loadSceneMode);
- status = LoadableStatus.Loading;
- }
- protected override void OnUnload()
- {
- base.OnUnload();
- if (dependencies != null)
- {
- dependencies.Unload();
- dependencies = null;
- }
- }
- protected override void OnLoad()
- {
- PrepareToLoad();
- dependencies = new Dependencies
- {
- pathOrURL = pathOrURL
- };
- dependencies.Load();
- status = LoadableStatus.DependentLoading;
- }
- internal static Scene Create(string assetPath, bool additive = false)
- {
- if (!Versions.Contains(assetPath))
- return new Scene
- {
- pathOrURL = assetPath,
- loadSceneMode = additive ? LoadSceneMode.Additive : LoadSceneMode.Single
- };
- return new BundledScene
- {
- pathOrURL = assetPath,
- loadSceneMode = additive ? LoadSceneMode.Additive : LoadSceneMode.Single
- };
- }
- }
- }
|