/// <summary> /// シーン作成ダイアログ表示 /// </summary> public static void DisplayBuildDialog(string directory) { // ダイアログを開く string fullpath = EditorUtility.SaveFilePanel("シーン作成先のフォルダ選択", directory, "", ""); if (string.IsNullOrEmpty(fullpath)) { return; } string path = "Assets" + fullpath.Substring(Application.dataPath.Length); if (string.IsNullOrEmpty(path)) { return; } if (AssetChecker.Exists(path)) { return; } // シーン作成 bool success; var data = TryBuildScene(path, out success); if (success) { UnityCallback.SetActionOnCompiled(new TemporaryFileData(data)); } }
/// <summary> /// シーンの作成 /// </summary> /// <param name="path">作成先のファイルパス</param> static TemporaryFileData.Data TryBuildScene(string path, out bool success) { if (AssetChecker.Exists(path)) { Debug.LogFormat("Exist:{0}", path); success = false; return(default(TemporaryFileData.Data)); } // フォルダ作成 string rootFolderPath = FolderBuilder.BuildFolderSet(path); if (string.IsNullOrEmpty(rootFolderPath)) { success = false; return(default(TemporaryFileData.Data)); } // シーンを開く var templateScene = DataLoader.LoadSceneTemplate(); EditorSceneManager.OpenScene(AssetDatabase.GetAssetPath(templateScene), OpenSceneMode.Additive); #warning TODO: JSONを取得してScriptDependencyからスクリプトを作成する var rootFolderName = rootFolderPath.Split('/').Last(); // シーンを保存 var scenePath = string.Format("{0}/{1}.unity", rootFolderPath, rootFolderName); EditorSceneManager.SetActiveScene(EditorSceneManager.GetSceneByName(templateScene.name)); EditorSceneManager.SaveScene(EditorSceneManager.GetSceneByName(templateScene.name), scenePath); // プログレスバー EditorUtility.DisplayProgressBar(string.Format("シーン\"{0}\"の作成中...", rootFolderName), "", 0f); // スクリプト作成 var scriptDependency = DataLoader.LoadScriptDependency(); var scripts = ScriptBuilder.BuildScripts(rootFolderPath + "/" + Config.ScriptFolder, rootFolderName, scriptDependency); // コンパイル終了時の処理 設定 var data = new TemporaryFileData.Data { SceneName = rootFolderName, FolderPath = rootFolderPath, Scripts = scripts.ToArray(), }; success = true; return(data); }