{"id":497,"date":"2025-10-02T21:36:11","date_gmt":"2025-10-02T21:36:11","guid":{"rendered":"https:\/\/ryanzehm.com\/unity\/?page_id=497"},"modified":"2025-10-15T17:48:44","modified_gmt":"2025-10-15T17:48:44","slug":"additive-scene-manager","status":"publish","type":"page","link":"https:\/\/ryanzehm.com\/unity\/additive-scene-manager\/","title":{"rendered":"Additive Scene Manager"},"content":{"rendered":"\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\"><div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/ryanzehm.com\/unity\/additive-scene-manager\/#Introduction\" >Introduction<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/ryanzehm.com\/unity\/additive-scene-manager\/#Scripting_Reference\" >Scripting Reference<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/ryanzehm.com\/unity\/additive-scene-manager\/#What_is_Additive_Scene_Manager\" >What is Additive Scene Manager?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/ryanzehm.com\/unity\/additive-scene-manager\/#Terminology\" >Terminology<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/ryanzehm.com\/unity\/additive-scene-manager\/#How_To_Use\" >How To Use<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/ryanzehm.com\/unity\/additive-scene-manager\/#SceneControllercs\" >SceneController.cs<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/ryanzehm.com\/unity\/additive-scene-manager\/#AdditiveSceneTriggercs\" >AdditiveSceneTrigger.cs<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/ryanzehm.com\/unity\/additive-scene-manager\/#Upgrading_Additive_Scene_Manager\" >Upgrading Additive Scene Manager<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/ryanzehm.com\/unity\/additive-scene-manager\/#Lightmapping_Multiple_Scenes\" >Lightmapping Multiple Scenes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/ryanzehm.com\/unity\/additive-scene-manager\/#Demo_Project\" >Demo Project<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/ryanzehm.com\/unity\/additive-scene-manager\/#Additional_Support\" >Additional Support<\/a><\/li><\/ul><\/nav><\/div>\n\n<\/div>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Introduction\"><\/span>Introduction<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"\"><a href=\"https:\/\/youtu.be\/4OD-_EczO8s\">Video Tutorial<\/a> | <a href=\"https:\/\/discord.gg\/jrvzFbJhYj\">Discord Support<\/a> | <a href=\"https:\/\/ryanzehm.com\/unity\/Documentation\/AdditiveSceneManager\/\">Scripting Reference <\/a>| <a href=\"https:\/\/ryanzehm.com\/unity\/contact\/\">Contact Me<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Scripting_Reference\"><\/span>Scripting Reference<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"\">A complete scripting reference is available here: <a href=\"https:\/\/ryanzehm.com\/unity\/Documentation\/AdditiveSceneManager\">https:\/\/ryanzehm.com\/unity\/Documentation\/AdditiveSceneManager<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_is_Additive_Scene_Manager\"><\/span>What is Additive Scene Manager?<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"\">Dealing with additive scenes and asynchronous scene loading can be difficult and confusing. This asset provides a set of functions that simplifies the asynchronous loading and unloading of additive scenes. The SceneController script has a custom inspector and In-Game UI to display which scenes are loading\/loaded so it\u2019s easy to understand what is happening and what loading stage each scene is at.\u00a0<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Terminology\"><\/span>Terminology<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<figure class=\"is-style-stripes wp-block-table\"><table><tbody><tr><td><strong>Scene Controller<\/strong><\/td><td>The main script for loading, unloading, and reloading scenes.<br><a href=\"https:\/\/ryanzehm.com\/unity\/Documentation\/AdditiveSceneManager\/class_additive_scene_manager_1_1_scene_controller.html\">Scripting Reference: Scene Controller<\/a><\/td><\/tr><tr><td><strong>Active Scene<\/strong><\/td><td>The \u201cActive Scene\u201d is the Scene which will be used as the target for new GameObjects instantiated by scripts and from which Scene the lighting settings are used. <br><a href=\"https:\/\/docs.unity3d.com\/6000.2\/Documentation\/ScriptReference\/SceneManagement.SceneManager.SetActiveScene.html\">SceneManager.SetActiveScene<\/a><\/td><\/tr><tr><td><strong>Activate Scene<\/strong><\/td><td><em>* These 2 are extremely similar, \u201cActive\u201d vs \u201cActivate\u201d- be careful.*  <\/em><br>To \u201cActivate\u201d a scene is to set its <em>allowSceneActivation <\/em>boolean to true, allowing the loading of progress from 0.9 to 1.0. A scene will not be visible, nor will OnEnable, Awake, or Start, run until a scene is activated. <br><a href=\"https:\/\/docs.unity3d.com\/6000.2\/Documentation\/ScriptReference\/AsyncOperation-allowSceneActivation.html\">AsyncOperation.allowSceneActivation<\/a><\/td><\/tr><tr><td><strong>Additive Scene<\/strong><\/td><td>A scene which is loaded at the same time as other scenes, multiple scenes loaded at once. <br><a href=\"https:\/\/docs.unity3d.com\/6000.2\/Documentation\/ScriptReference\/SceneManagement.LoadSceneMode.Additive.html\">LoadSceneMode.Additive<\/a><\/td><\/tr><tr><td><strong>Asynchronous Loading<\/strong><\/td><td>Load a Scene on a separate background thread while the main thread continues to run the core game loop.\u00a0<br><a href=\"https:\/\/docs.unity3d.com\/6000.2\/Documentation\/ScriptReference\/SceneManagement.SceneManager.LoadSceneAsync.html\">SceneManager.LoadSceneAsync<\/a><\/td><\/tr><tr><td><strong>Thread Priority<\/strong><\/td><td>Priority of a background loading thread. <br>Lower priority means a background operation will run less often and will take up less time, so loading progress will be slower (Higher FPS).Higher priority means a background operation will run more often and will take up more time, so loading progress will be faster (Lower FPS).\u00a0<br><a href=\"https:\/\/docs.unity3d.com\/6000.2\/Documentation\/ScriptReference\/Application-backgroundLoadingPriority.html\">Application.backgroundLoadingPriority<\/a><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"How_To_Use\"><\/span>How To Use<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"\">The player\/camera is the object that needs to move between the additive scenes. The main scene with <strong>Main Camera <\/strong>should have a Game Controller. More info can be found here: <a href=\"https:\/\/unity3d.com\/learn\/tutorials\/topics\/scripting\/persistence-saving-and-loading-data\">https:\/\/unity3d.com\/learn\/tutorials\/topics\/scripting\/persistence-saving-and-loading-data<\/a><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li class=\"\"><strong>Create a Game Controller<\/strong><\/li>\n<\/ol>\n\n\n\n<p class=\"\">If you do not have a game controller already, add a new empty GameObject, name it appropriately, and add Unity\u2019s default tag <em>GameController<\/em>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"399\" height=\"257\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/GameController.webp?resize=399%2C257&#038;ssl=1\" alt=\"\" class=\"wp-image-518\" srcset=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/GameController.webp?w=399&amp;ssl=1 399w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/GameController.webp?resize=300%2C193&amp;ssl=1 300w\" sizes=\"auto, (max-width: 399px) 100vw, 399px\" \/><\/figure>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li class=\"\"><strong>Add a Scene Controller Component<\/strong><\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"SceneControllercs\"><\/span>SceneController.cs<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"\">The SceneContoller script contains functions for loading and unloading scenes. Add this script to your GameController:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"400\" height=\"163\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/AddSceneController.webp?resize=400%2C163&#038;ssl=1\" alt=\"\" class=\"wp-image-520\" srcset=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/AddSceneController.webp?w=400&amp;ssl=1 400w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/AddSceneController.webp?resize=300%2C122&amp;ssl=1 300w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/figure>\n\n\n\n<p class=\"\">The SceneController editor gives the ability to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\">Add scenes that will be loaded when the game starts.<\/li>\n\n\n\n<li class=\"\">Add \u2018persistent\u2019 scenes that will not be unloaded by SceneController\u2019s Unload functions.<\/li>\n\n\n\n<li class=\"\">View all scenes which are currently loaded by Unity\u2019s SceneManager class.<\/li>\n\n\n\n<li class=\"\">View what loading stage each scene is at:<\/li>\n<\/ul>\n\n\n\n<figure class=\"is-style-stripes wp-block-table\"><table><tbody><tr><td><img data-recalc-dims=\"1\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/CircleGreen.png?ssl=1\" alt=\"\">  Green <\/td><td>Fully Loaded. Async progress 1.0 (Async operation is completed\/null)<\/td><\/tr><tr><td><img data-recalc-dims=\"1\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/CircleYellow.png?ssl=1\" alt=\"\">  Yellow <\/td><td>Loaded but not activated. Async progress 0.9 (allowSceneActivation is false)<\/td><\/tr><tr><td><img data-recalc-dims=\"1\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/CircleRed.png?ssl=1\" alt=\"\">  Red <\/td><td>Loading in progress. Async progress 0.0 &#8211; 0.8. (Async operation is loading data)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\">Set the <em>allowSceneActivation <\/em>boolean to true ( \u201c+\u201d Button for a Yellow Scene).<\/li>\n\n\n\n<li class=\"\">Unload a scene from the Editor (\u201c-\u201d Button for a Green Scene).<\/li>\n\n\n\n<li class=\"\">Bake lightmaps on all open scenes.<\/li>\n\n\n\n<li class=\"\">Set the Background Thread Loading Priority.\u00a0<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"800\" height=\"523\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/SceneController.webp?resize=800%2C523&#038;ssl=1\" alt=\"\" class=\"wp-image-510\" srcset=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/SceneController.webp?w=800&amp;ssl=1 800w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/SceneController.webp?resize=300%2C196&amp;ssl=1 300w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/SceneController.webp?resize=768%2C502&amp;ssl=1 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li class=\"\"><strong>Add an Additive Scene Trigger to your scene.<\/strong><\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"AdditiveSceneTriggercs\"><\/span>AdditiveSceneTrigger.cs<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"\">This script uses the SceneController functions so you can get additive scenes working in your project without using any code. AdditiveSceneTrigger requires a Unity trigger, so add a collider and set <em>Is Trigger:<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"733\" height=\"220\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/AdditiveSceneTrigger.webp?resize=733%2C220&#038;ssl=1\" alt=\"\" class=\"wp-image-502\" srcset=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/AdditiveSceneTrigger.webp?w=733&amp;ssl=1 733w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/AdditiveSceneTrigger.webp?resize=300%2C90&amp;ssl=1 300w\" sizes=\"auto, (max-width: 733px) 100vw, 733px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\"><strong>Visible Scenes <\/strong>is a list of scenes that are visible from this trigger. Any scene that is added here will be asynchronously loaded when the player enters this trigger. All other scenes will be unloaded, except <em>Persistent Scenes<\/em>.<\/li>\n\n\n\n<li class=\"\">The Tag \u201c<strong>Player<\/strong>\u201d must be assigned to the Player\/Main Camera object:<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"401\" height=\"137\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/TagPlayer.webp?resize=401%2C137&#038;ssl=1\" alt=\"\" class=\"wp-image-522\" srcset=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/TagPlayer.webp?w=401&amp;ssl=1 401w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/TagPlayer.webp?resize=300%2C102&amp;ssl=1 300w\" sizes=\"auto, (max-width: 401px) 100vw, 401px\" \/><\/figure>\n\n\n\n<p class=\"\">(see AdditiveSceneTrigger.cs: <em>if (!other.gameObject.CompareTag(&#8220;Player&#8221;)) return;<\/em>)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Upgrading_Additive_Scene_Manager\"><\/span>Upgrading Additive Scene Manager<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"\">When upgrading Additive Scene Manager, do not overwrite your settings file. The settings file is located at <em>\/Nurface\/AdditiveSceneManager\/Resources\/SceneControllerSettings.asset.&nbsp;<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"343\" height=\"94\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/Upgrade.webp?resize=343%2C94&#038;ssl=1\" alt=\"\" class=\"wp-image-524\" srcset=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/Upgrade.webp?w=343&amp;ssl=1 343w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/Upgrade.webp?resize=300%2C82&amp;ssl=1 300w\" sizes=\"auto, (max-width: 343px) 100vw, 343px\" \/><\/figure>\n\n\n\n<p class=\"\">Deselect this folder\/file when upgrading Additive Scene Manager, or the settings on the SceneController class will be overwritten.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Lightmapping_Multiple_Scenes\"><\/span>Lightmapping Multiple Scenes<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"\">It is possible to bake lighting on multiple opened scenes at the same time. This uses the Unity Scripting API function, <em><a href=\"https:\/\/docs.unity3d.com\/ScriptReference\/Lightmapping.BakeMultipleScenes.html\">Lightmapping.BakeMultipleScenes<\/a><\/em>. Open all of the scenes that you want to bake within the Hierarchy Window and then click the \u201cBake Lightmaps On All Open Scenes\u201d button on the Scene Controller Inspector:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"374\" height=\"210\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/BakeLightmaps.webp?resize=374%2C210&#038;ssl=1\" alt=\"\" class=\"wp-image-504\" srcset=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/BakeLightmaps.webp?w=374&amp;ssl=1 374w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/BakeLightmaps.webp?resize=300%2C168&amp;ssl=1 300w\" sizes=\"auto, (max-width: 374px) 100vw, 374px\" \/><\/figure>\n\n\n\n<p class=\"\"><s>Unity will be unresponsive until the bake has finished on all scenes. This operation is currently not possible to run additively like a normal lightmap bake. I\u2019ve opened a feature request for this, so that Unity Editor can be used while a multi-scene bake is running:<\/s><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\"><em>Feature Request approved &amp; implemented by Unity- thanks for your help!\u00a0<\/em><\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Demo_Project\"><\/span>Demo Project<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"\">The included project located at <em>\/AdditiveSceneManager\/Demo\/ <\/em>has 9 scenes for how an example game may be set up. To see the complete project, load all 9 scenes in Unity:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"586\" height=\"214\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/Demo00.webp?resize=586%2C214&#038;ssl=1\" alt=\"\" class=\"wp-image-526\" srcset=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/Demo00.webp?w=586&amp;ssl=1 586w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/Demo00.webp?resize=300%2C110&amp;ssl=1 300w\" sizes=\"auto, (max-width: 586px) 100vw, 586px\" \/><\/figure>\n\n\n\n<p class=\"\">The idea is that the <strong>PlayerCamera <\/strong>scene and the <strong>Sun <\/strong>scene are to be loaded at all times, and each room will be loaded additively. Each room has an <strong>AdditiveSceneTrigger <\/strong>script with the visible scenes configured. In this example, we have only set the \u201cVisible Scenes\u201d for each room to be the room directly next to it. The following image shows how the middle room, RoomB, is configured:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"956\" height=\"404\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/Demo01.webp?resize=956%2C404&#038;ssl=1\" alt=\"\" class=\"wp-image-506\" srcset=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/Demo01.webp?w=956&amp;ssl=1 956w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/Demo01.webp?resize=300%2C127&amp;ssl=1 300w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/Demo01.webp?resize=768%2C325&amp;ssl=1 768w\" sizes=\"auto, (max-width: 956px) 100vw, 956px\" \/><\/figure>\n\n\n\n<p class=\"\">Open the <strong>PlayerCamera <\/strong>scene and select the <strong>GameController <\/strong>gameobject.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\"><strong>Scenes To Load At Start<\/strong> should be set to: PlayerCamera, Sun, RoomA<\/li>\n\n\n\n<li class=\"\"><strong>Persistent Scenes<\/strong> should be set to: PlayerCamera, Sun<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"380\" height=\"289\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/Demo02.webp?resize=380%2C289&#038;ssl=1\" alt=\"\" class=\"wp-image-508\" srcset=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/Demo02.webp?w=380&amp;ssl=1 380w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/Demo02.webp?resize=300%2C228&amp;ssl=1 300w\" sizes=\"auto, (max-width: 380px) 100vw, 380px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\"><strong>Important!<\/strong> Ensure the Player gameobject has the <strong>Player <\/strong>tag set:<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"401\" height=\"137\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/TagPlayer-1.jpg?fit=401%2C137&amp;ssl=1\" alt=\"\" class=\"wp-image-529\" srcset=\"https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/TagPlayer-1.jpg?w=401&amp;ssl=1 401w, https:\/\/i0.wp.com\/ryanzehm.com\/unity\/wp-content\/uploads\/2025\/10\/TagPlayer-1.jpg?resize=300%2C102&amp;ssl=1 300w\" sizes=\"auto, (max-width: 401px) 100vw, 401px\" \/><\/figure>\n\n\n\n<p class=\"\">You are now ready to play the demo, and each room will be loaded additively and asynchronously and any scene that is not persistent nor visible will be automatically unloaded.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\">In the demo, click to move the character between rooms \/ scenes.<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Additional_Support\"><\/span>Additional Support<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p class=\"\"><strong>Current Tutorial Video:<\/strong> <a href=\"https:\/\/youtu.be\/4OD-_EczO8s\">https:\/\/youtu.be\/4OD-_EczO8s<\/a><\/p>\n\n\n\n<p class=\"\"><strong>Discord Support:<\/strong> <a href=\"https:\/\/discord.gg\/jrvzFbJhYj\">https:\/\/discord.gg\/jrvzFbJhYj<\/a><\/p>\n\n\n\n<p class=\"\"><strong>Join on YouTube<\/strong> for Unity Development &amp; other interesting topics: <a href=\"https:\/\/www.youtube.com\/ryanzehm\">https:\/\/www.youtube.com\/ryanzehm<\/a><\/p>\n\n\n\n<p class=\"\"><strong>For any questions or support<\/strong>, please contact me here: <a href=\"https:\/\/ryanzehm.com\/unity\/contact\/\">https:\/\/ryanzehm.com\/unity\/contact\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Video Tutorial | Discord Support | Scripting Reference | Contact Me Scripting Reference A complete scripting reference is available here: https:\/\/ryanzehm.com\/unity\/Documentation\/AdditiveSceneManager What is Additive Scene Manager? Dealing with additive scenes and asynchronous scene loading can be difficult and confusing. This asset provides a set of functions that simplifies the asynchronous loading and unloading of [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"nf_dc_page":"","footnotes":""},"class_list":["post-497","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ryanzehm.com\/unity\/wp-json\/wp\/v2\/pages\/497","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ryanzehm.com\/unity\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ryanzehm.com\/unity\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ryanzehm.com\/unity\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ryanzehm.com\/unity\/wp-json\/wp\/v2\/comments?post=497"}],"version-history":[{"count":10,"href":"https:\/\/ryanzehm.com\/unity\/wp-json\/wp\/v2\/pages\/497\/revisions"}],"predecessor-version":[{"id":538,"href":"https:\/\/ryanzehm.com\/unity\/wp-json\/wp\/v2\/pages\/497\/revisions\/538"}],"wp:attachment":[{"href":"https:\/\/ryanzehm.com\/unity\/wp-json\/wp\/v2\/media?parent=497"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}