/// <summary> /// Saves the scenes. /// </summary> void SaveScenes() { foreach (var layer in currentCollections) { foreach (var item in loadedScenes) { if (item.name.StartsWith(layer.prefixScene) && item.isLoaded) { if (GameObject.Find(item.name) == null) { GameObject split = new GameObject(item.name); SceneSplitManager sceneSplitManager = split.AddComponent <SceneSplitManager> (); sceneSplitManager.sceneName = split.name; sceneSplitManager.size = new Vector3(layer.xSize != 0 ? layer.xSize : 100, layer.ySize != 0 ? layer.ySize : 100, layer.zSize != 0 ? layer.zSize : 100); int posx; int posy; int posz; Streamer.SceneNameToPos(layer, item.name, out posx, out posy, out posz); posx *= layer.xSize; posy *= layer.ySize; posz *= layer.zSize; sceneSplitManager.position = GetSplitPosition(new Vector3(posx, posy, posz), layer); sceneSplitManager.color = layer.color; EditorSceneManager.MoveGameObjectToScene(split, item); } } } } EditorSceneManager.SaveModifiedScenesIfUserWantsTo(loadedScenes.ToArray()); }
/// <summary> /// Splits the scene into tiles. /// </summary> void SplitScene(SceneCollection layer) { warning = ""; splits [layer.layerNumber] = new Dictionary <string, GameObject> (); layer.xLimitsx = int.MaxValue; layer.xLimitsy = int.MinValue; layer.yLimitsx = int.MaxValue; layer.yLimitsy = int.MinValue; layer.zLimitsx = int.MaxValue; layer.zLimitsy = int.MinValue; GameObject[] allObjects = UnityEngine.Object.FindObjectsOfType <GameObject> (); FindSceneGO(layer.prefixScene, allObjects, splits [layer.layerNumber]); ClearSceneGO(layer); foreach (var item in allObjects) { if (item == null || item.transform.parent != null || !item.name.StartsWith(layer.prefixName) || item.GetComponent <SceneSplitManager> () != null || item.GetComponent <SceneCollection> () != null || item.GetComponent <SceneSplitterSettings> () != null) { continue; } string itemId = GetID(item.transform.position, layer); GameObject split = null; if (!splits [layer.layerNumber].TryGetValue(itemId, out split)) { split = new GameObject(layer.prefixScene + itemId); SceneSplitManager sceneSplitManager = split.AddComponent <SceneSplitManager> (); sceneSplitManager.sceneName = split.name; sceneSplitManager.size = new Vector3(layer.xSize != 0 ? layer.xSize : 100, layer.ySize != 0 ? layer.ySize : 100, layer.zSize != 0 ? layer.zSize : 100); sceneSplitManager.position = GetSplitPosition(item.transform.position, layer); sceneSplitManager.color = layer.color; splits [layer.layerNumber].Add(itemId, split); Vector3 splitPosId = GetSplitPositionID(item.transform.position, layer); if (layer.xSplitIs) { if (splitPosId.x < layer.xLimitsx) { layer.xLimitsx = (int)splitPosId.x; } if (splitPosId.x > layer.xLimitsy) { layer.xLimitsy = (int)splitPosId.x; } } else { layer.xLimitsx = 0; layer.xLimitsy = 0; } if (layer.ySplitIs) { if (splitPosId.y < layer.yLimitsx) { layer.yLimitsx = (int)splitPosId.y; } if (splitPosId.y > layer.yLimitsy) { layer.yLimitsy = (int)splitPosId.y; } } else { layer.yLimitsx = 0; layer.yLimitsy = 0; } if (layer.zSplitIs) { if (splitPosId.z < layer.zLimitsx) { layer.zLimitsx = (int)splitPosId.x; } if (splitPosId.z > layer.zLimitsy) { layer.zLimitsy = (int)splitPosId.z; } } else { layer.zLimitsx = 0; layer.zLimitsy = 0; } } item.transform.SetParent(split.transform); } if (splits.Count == 0) { warning = "No objects to split. Check GameObject or Scene Prefix."; } }
/// <summary> /// Splits the scene into tiles. /// </summary> void SplitScene(SceneCollection layer) { warning = ""; splits [layer.layerNumber] = new Dictionary <string, GameObject> (); GameObject[] allObjects = UnityEngine.Object.FindObjectsOfType <GameObject> (); FindSceneGO(layer.prefixScene, allObjects, splits [layer.layerNumber]); ClearSceneGO(layer); foreach (var item in allObjects) { if (item == null || item.transform.parent != null || !item.name.StartsWith(layer.prefixName) || item.GetComponent <SceneSplitManager> () != null || item.GetComponent <SceneCollection> () != null || item.GetComponent <SceneSplitterSettings> () != null) { continue; } string splitName = layer.prefixScene + GetID(item.transform.position, layer); UnityEngine.SceneManagement.Scene scene = EditorSceneManager.GetSceneByName(splitName); //EditorSceneManager.NewScene (NewSceneSetup.EmptyScene, NewSceneMode.Additive); if (scene.name == null) { string splitSceneName = splitName + ".unity"; string sceneName = layer.path + splitSceneName; bool contains = false; foreach (var nameSplit in layer.names) { if (nameSplit == splitSceneName) { contains = true; break; } } if (!contains) { List <string> names = new List <string> (); names.AddRange(layer.names); names.Add(splitSceneName); layer.names = names.ToArray(); scene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Additive); EditorSceneManager.SaveScene(scene, sceneName); loadedScenes.Add(scene); } else { scene = EditorSceneManager.OpenScene(sceneName, OpenSceneMode.Additive); loadedScenes.Add(scene); } } } allObjects = UnityEngine.Object.FindObjectsOfType <GameObject> (); FindSceneGO(layer.prefixScene, allObjects, splits [layer.layerNumber]); ClearSceneGO(layer); foreach (var item in allObjects) { if (item == null || item.transform.parent != null || !item.name.StartsWith(layer.prefixName) || item.GetComponent <SceneSplitManager> () != null || item.GetComponent <SceneCollection> () != null || item.GetComponent <SceneSplitterSettings> () != null) { continue; } string itemId = GetID(item.transform.position, layer); GameObject split = null; if (!splits [layer.layerNumber].TryGetValue(itemId, out split)) { split = new GameObject(layer.prefixScene + itemId); SceneSplitManager sceneSplitManager = split.AddComponent <SceneSplitManager> (); sceneSplitManager.sceneName = split.name; sceneSplitManager.size = new Vector3(layer.xSize != 0 ? layer.xSize : 100, layer.ySize != 0 ? layer.ySize : 100, layer.zSize != 0 ? layer.zSize : 100); sceneSplitManager.position = GetSplitPosition(item.transform.position, layer); sceneSplitManager.color = layer.color; splits [layer.layerNumber].Add(itemId, split); Vector3 splitPosId = GetSplitPositionID(item.transform.position, layer); if (layer.xSplitIs) { if (splitPosId.x < layer.xLimitsx) { layer.xLimitsx = (int)splitPosId.x; } if (splitPosId.x > layer.xLimitsy) { layer.xLimitsy = (int)splitPosId.x; } } else { layer.xLimitsx = 0; layer.xLimitsy = 0; } if (layer.ySplitIs) { if (splitPosId.y < layer.yLimitsx) { layer.yLimitsx = (int)splitPosId.y; } if (splitPosId.y > layer.yLimitsy) { layer.yLimitsy = (int)splitPosId.y; } } else { layer.yLimitsx = 0; layer.yLimitsy = 0; } if (layer.zSplitIs) { if (splitPosId.z < layer.zLimitsx) { layer.zLimitsx = (int)splitPosId.x; } if (splitPosId.z > layer.zLimitsy) { layer.zLimitsy = (int)splitPosId.z; } } else { layer.zLimitsx = 0; layer.zLimitsy = 0; } UnityEngine.SceneManagement.Scene scene = EditorSceneManager.GetSceneByName(sceneSplitManager.sceneName); EditorSceneManager.MoveGameObjectToScene(split, scene); } item.transform.SetParent(split.transform); } if (splits.Count == 0) { warning = "No objects to split. Check GameObject or Scene Prefix."; } foreach (var item in loadedScenes) { if (!string.IsNullOrEmpty(item.name) && GameObject.Find(item.name) == null) { GameObject split = new GameObject(item.name); SceneSplitManager sceneSplitManager = split.AddComponent <SceneSplitManager> (); sceneSplitManager.sceneName = split.name; sceneSplitManager.size = new Vector3(layer.xSize != 0 ? layer.xSize : 100, layer.ySize != 0 ? layer.ySize : 100, layer.zSize != 0 ? layer.zSize : 100); int posx; int posy; int posz; Streamer.SceneNameToPos(layer, item.name, out posx, out posy, out posz); posx *= layer.xSize; posy *= layer.ySize; posz *= layer.zSize; sceneSplitManager.position = GetSplitPosition(new Vector3(posx, posy, posz), layer); sceneSplitManager.color = layer.color; splits [layer.layerNumber].Add(split.name.Replace(layer.prefixScene, ""), split); EditorSceneManager.MoveGameObjectToScene(split, item); } } }