Пример #1
0
        void PrepareForLoadScene(
            LoadSceneMode loadMode,
            Action <DiContainer> extraBindings,
            LoadSceneRelationship containerMode)
        {
            if (loadMode == LoadSceneMode.Single)
            {
                Assert.IsEqual(containerMode, LoadSceneRelationship.None);
            }

            if (containerMode == LoadSceneRelationship.None)
            {
                SceneContext.ParentContainer = null;
            }
            else if (containerMode == LoadSceneRelationship.Child)
            {
                SceneContext.ParentContainer = _sceneContainer;
            }
            else
            {
                Assert.IsEqual(containerMode, LoadSceneRelationship.Sibling);
                SceneContext.ParentContainer = _sceneContainer.ParentContainer;
            }

            SceneContext.ExtraBindingsInstallMethod = extraBindings;
        }
        private void PrepareForLoadScene(
            LoadSceneMode loadMode,
            Action <DiContainer> extraBindings,
            Action <DiContainer> extraBindingsLate,
            LoadSceneRelationship containerMode)
        {
            if (loadMode == LoadSceneMode.Single)
            {
                Assert.IsEqual(containerMode, LoadSceneRelationship.None);

                // Here we explicitly unload all existing scenes rather than relying on Unity to
                // do this for us.  The reason we do this is to ensure a deterministic destruction
                // order for everything in the scene and in the container.
                // See comment at ProjectKernel.OnApplicationQuit for more details
                _projectKernel.ForceUnloadAllScenes();
            }

            if (containerMode == LoadSceneRelationship.None)
            {
                SceneContext.ParentContainers = null;
            }
            else if (containerMode == LoadSceneRelationship.Child)
            {
                SceneContext.ParentContainers = new DiContainer[] { _sceneContainer };
            }
            else
            {
                Assert.IsEqual(containerMode, LoadSceneRelationship.Sibling);
                SceneContext.ParentContainers = _sceneContainer.ParentContainers;
            }

            SceneContext.ExtraBindingsInstallMethod     = extraBindings;
            SceneContext.ExtraBindingsLateInstallMethod = extraBindingsLate;
        }
Пример #3
0
 public void LoadScene(
     string sceneName,
     LoadSceneMode loadMode,
     Action <DiContainer> extraBindings,
     LoadSceneRelationship containerMode)
 {
     LoadScene(sceneName, loadMode, extraBindings, containerMode, null);
 }
Пример #4
0
 public void LoadScene(
     int sceneIndex,
     LoadSceneMode loadMode,
     Action <DiContainer> extraBindings,
     LoadSceneRelationship containerMode)
 {
     LoadScene(sceneIndex, loadMode, extraBindings, containerMode, null);
 }
Пример #5
0
 public AsyncOperation LoadSceneAsync(
     string sceneName,
     LoadSceneMode loadMode,
     Action <DiContainer> extraBindings,
     LoadSceneRelationship containerMode)
 {
     return(LoadSceneAsync(
                sceneName, loadMode, extraBindings, containerMode, null));
 }
Пример #6
0
 public AsyncOperationHandle <SceneInstance> LoadSceneAsync(
     AssetReferenceSceneAsset sceneReference,
     LoadSceneMode loadMode,
     Action <DiContainer> extraBindings,
     LoadSceneRelationship containerMode)
 {
     return(LoadSceneAsync(
                sceneReference, loadMode, extraBindings, containerMode, null));
 }
Пример #7
0
        public AsyncOperationHandle <SceneInstance> LoadSceneAsync(
            AssetReferenceSceneAsset sceneReference,
            LoadSceneMode loadMode,
            Action <DiContainer> extraBindings,
            LoadSceneRelationship containerMode,
            Action <DiContainer> extraBindingsLate)
        {
            PrepareForLoadScene(loadMode, extraBindings, extraBindingsLate, containerMode);

            return(Addressables.LoadSceneAsync(sceneReference, loadMode));
        }
Пример #8
0
        public AsyncOperation LoadSceneAsync(
            string sceneName,
            LoadSceneMode loadMode,
            Action <DiContainer> extraBindings,
            LoadSceneRelationship containerMode)
        {
            PrepareForLoadScene(loadMode, extraBindings, containerMode);

            Assert.That(Application.CanStreamedLevelBeLoaded(sceneName),
                        "Unable to load scene '{0}'", sceneName);

            return(SceneManager.LoadSceneAsync(sceneName, loadMode));
        }
        public AsyncOperation LoadSceneAsync(
            int sceneIndex,
            LoadSceneMode loadMode                 = LoadSceneMode.Single,
            Action <DiContainer> extraBindings     = null,
            LoadSceneRelationship containerMode    = LoadSceneRelationship.None,
            Action <DiContainer> extraBindingsLate = null)
        {
            PrepareForLoadScene(loadMode, extraBindings, extraBindingsLate, containerMode);

            Assert.That(Application.CanStreamedLevelBeLoaded(sceneIndex),
                        "Unable to load scene '{0}'", sceneIndex);

            return(SceneManager.LoadSceneAsync(sceneIndex, loadMode));
        }
Пример #10
0
        public void LoadScene(
            string sceneName,
            LoadSceneMode loadMode,
            Action <DiContainer> extraBindings,
            LoadSceneRelationship containerMode)
        {
            PrepareForLoadScene(loadMode, extraBindings, containerMode);

            Assert.That(Application.CanStreamedLevelBeLoaded(sceneName),
                        "Unable to load scene '{0}'", sceneName);

            SceneManager.LoadScene(sceneName, loadMode);

            // It would be nice here to actually verify that the new scene has a SceneContext
            // if we have extra binding hooks, or LoadSceneRelationship != None, but
            // we can't do that in this case since the scene isn't loaded until the next frame
        }
Пример #11
0
            public PendingLoadOperation(
                AssetBundleInitializer assetBundleInitializer,
                ZenjectAssetBundleSceneLoader sceneLoader,
                string sceneName,
                LoadSceneMode loadMode,
                Action <DiContainer> extraBindings,
                LoadSceneRelationship containerMode)
            {
                this.assetBundleInitializer = assetBundleInitializer;
                this.sceneLoader            = sceneLoader;
                this.sceneName     = sceneName;
                this.loadMode      = loadMode;
                this.extraBindings = extraBindings;
                this.containerMode = containerMode;

                assetBundleInitializer.Initialized += AssetBundleInitializerInitialized;
            }
Пример #12
0
        public AssetBundleLoadOperation LoadSceneAsync(
            string sceneName,
            LoadSceneMode loadMode,
            Action <DiContainer> extraBindings,
            LoadSceneRelationship containerMode)
        {
            if (!_assetBundleInitializer.IsInitialized)
            {
                return(new PendingLoadOperation(
                           _assetBundleInitializer,
                           this,
                           sceneName,
                           loadMode,
                           extraBindings,
                           containerMode));
            }

            PrepareForLoadScene(loadMode, extraBindings, containerMode);

            return(AssetBundleManager.LoadLevelAsync(
                       _assetBundleName,
                       sceneName,
                       loadMode == LoadSceneMode.Additive));
        }