static void SaveCurrentHierarchy(MultipleSceneSetting _data) { var setups = EditorSceneManager.GetSceneManagerSetup(); var newList = new List <MultipleScenesData>(); foreach (var s in setups) { SceneAsset scn = AssetDatabase.LoadAssetAtPath <SceneAsset>(s.path); MultipleScenesData dataToAdd = null; foreach (var d in _data.sceneDatas) { if (scn.name == d.SceneName) { dataToAdd = d; break; } } if (dataToAdd == null) { dataToAdd = new MultipleScenesData(); dataToAdd.sceneObject = scn; } newList.Add(dataToAdd); } Undo.RecordObject(_data, "List Update"); _data.sceneDatas = newList; EditorUtility.SetDirty(_data); }
void LoadScenes(MultipleSceneSetting _data) { var sceneSetups = EditorSceneManager.GetSceneManagerSetup(); foreach (var setup in sceneSetups) { bool exist = false; foreach (var d in _data.sceneDatas) { var path = AssetDatabase.GetAssetPath(d.sceneObject); if (path == setup.path) { exist = true; break; } } if (!exist) { var scn = EditorSceneManager.GetSceneByPath(setup.path); EditorSceneManager.CloseScene(scn, true); } } foreach (var d in _data.sceneDatas) { var path = AssetDatabase.GetAssetPath(d.sceneObject); var scn = EditorSceneManager.GetSceneByPath(path); if (scn.isLoaded) { continue; } EditorSceneManager.OpenScene(path, OpenSceneMode.Additive); Debug.Log("[MultipleSceneSetting] Scene Loaded Additively = " + d.sceneObject.name); } }