private static void SaveTemplateFromCurrentScene() { var currentScene = SceneManager.GetActiveScene(); if (string.IsNullOrEmpty(currentScene.path)) { var suggestedScenePath = SceneTemplateUtils.SaveFilePanelUniqueName(L10n.Tr("Save scene"), "Assets", "newscene", "unity"); if (string.IsNullOrEmpty(suggestedScenePath) || !EditorSceneManager.SaveScene(EditorSceneManager.GetActiveScene(), suggestedScenePath)) { return; } } var sceneTemplateFile = SceneTemplateUtils.SaveFilePanelUniqueName(L10n.Tr("Save scene"), Path.GetDirectoryName(currentScene.path), Path.GetFileNameWithoutExtension(currentScene.path), SceneTemplateAsset.extension); if (string.IsNullOrEmpty(sceneTemplateFile)) { return; } var sourceSceneAsset = AssetDatabase.LoadAssetAtPath <SceneAsset>(currentScene.path); CreateTemplateFromScene(sourceSceneAsset, sceneTemplateFile, SceneTemplateAnalytics.TemplateCreationType.SaveCurrentSceneAsTemplateMenu); }
private static bool InstantiateScene(SceneTemplateAsset sceneTemplate, string sourceScenePath, ref string newSceneOutputPath) { if (String.IsNullOrEmpty(newSceneOutputPath)) { newSceneOutputPath = SceneTemplateUtils.SaveFilePanelUniqueName( $"Save scene instantiated from template ({sceneTemplate.name})", SceneTemplateUtils.GetLastFolder("unity"), Path.GetFileNameWithoutExtension(sourceScenePath), "unity"); if (string.IsNullOrEmpty(newSceneOutputPath)) { return(false); } } if (Path.IsPathRooted(newSceneOutputPath)) { newSceneOutputPath = FileUtil.GetProjectRelativePath(newSceneOutputPath); } if (sourceScenePath == newSceneOutputPath) { Debug.LogError($"Cannot instantiate over template scene: {newSceneOutputPath}"); return(false); } var destinationDir = Path.GetDirectoryName(newSceneOutputPath); if (destinationDir != null && !Directory.Exists(destinationDir)) { Directory.CreateDirectory(destinationDir); } AssetDatabase.CopyAsset(sourceScenePath, newSceneOutputPath); return(true); }