Unityのメニューバーから"File->Open Scene..."を選んでシーンを変更すると、毎回ファイル選択ダイアログがAssetsフォルダに戻ってしまって面倒…。画面下のProjectウィンドウでシーンをダブルクリックで選択する方が楽ですが、それだと選択していたオブジェクトが解除されてしまって面倒…。
ということで、シーンセレクターウィンドウを作ってみました。このスクリプトはEditor専用APIを使っていますので、SceneSelector.csを任意の"Editor"フォルダに入れてください。そして、UnityEditorのメニューバーの"Window"から"Scene Selector"を選択、出てきたウィンドウのボタンを押すとシーンが変わります。編集中のオブジェクトがあった場合はセーブウィンドウが出て確認を求められます。
おっとその前に、スクリプト内の文字列配列sceneDirsにシーンファイルのあるフォルダを皆さんの環境に合わせて設定してください(複数フォルダの指定も可)。スクリプト的にはプロジェクト内を全探索する方が楽なんですが、プロジェクトの規模によっては使い物にならないくらい遅くなるので、このような形にしてみました。なお、実機やPlayerでは動きません。
制作用と実行用のシーンを分けていて、それらの行ったり来たりを繰り返す方には便利なのではないかと思います。実際、私にとってはすごく便利です!!(笑)
using UnityEngine;
using UnityEditor;
using UnityEditor.SceneManagement;
using System.Collections.Generic;
public class SceneSelector : EditorWindow
{
[MenuItem("Window/Scene Selector", false, 1000)]
public static void ShowWindow()
{
EditorWindow.GetWindow<SceneSelector>("Scene Selector");
}
void OnGUI()
{
m_scroll_pos = EditorGUILayout.BeginScrollView(m_scroll_pos);
string[] sceneDirs = { "Assets/Test/Scenes", "Assets/UnityChan/Scenes" };
string[] sceneGUIDs = AssetDatabase.FindAssets("t:Scene", sceneDirs);
foreach (var sceneGUID in sceneGUIDs)
{
string scenePath = AssetDatabase.GUIDToAssetPath(sceneGUID);
string[] sceneName = scenePath.Split(new char[] { '/' });
if (GUILayout.Button(sceneName[sceneName.Length - 1].Replace(".unity", "")))
{
if (EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo())
EditorSceneManager.OpenScene(scenePath);
}
}
EditorGUILayout.EndScrollView();
}
Vector2 m_scroll_pos = Vector2.zero;
}
※以前のは正しく動作しないものだったので上げ直しました…。 2016/11/10