はじめに
Unityを使っていると、シーンファイル(.unity)を開くという作業が数えきれないほど発生するかと思います。
プロジェクトに存在するファイルが少ないうちはシーンファイルを直接クリックして開くだけでも特に困ることはないのですが、ファイルが増えてくると目的のシーンファイルを探すのに手間がかかるようになってきます。
そこで、プロジェクト内に存在するシーンファイルをウィンドウ上から直接開くウィンドウを作ってみました。
環境
Unity5.6.1f3
Windows 10
作ったものについて
ウィンドウ上にシーンの一覧がボタンで表示されるようなものを作ってみました。
ボタンをクリックすると対応するシーンを開くことができます。
ソースコード
Unityプロジェクト内にEditorフォルダを作成して、以下のスクリプトを入れるとこのツールが使えるようになります。
SceneLaunchWindow.cs
namespace SceneLauncher
{
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.SceneManagement;
using System.Linq;
public class SceneLaunchWindow : EditorWindow
{
private SceneAsset[] sceneArray;
private Vector2 scrollPos = Vector2.zero;
[MenuItem("Tools/Scene Launcher")]
static void Open()
{
GetWindow<SceneLaunchWindow>("SceneLauncher");
}
void OnFocus()
{
this.ReloadScenes();
}
void OnGUI()
{
if (this.sceneArray == null) { this.ReloadScenes(); }
if (this.sceneArray.Length == 0)
{
EditorGUILayout.LabelField("シーンファイル(.unity)が存在しません");
return;
}
EditorGUI.BeginDisabledGroup(EditorApplication.isPlaying);
this.scrollPos = EditorGUILayout.BeginScrollView(this.scrollPos);
foreach (var scene in this.sceneArray)
{
var path = AssetDatabase.GetAssetPath(scene);
if (GUILayout.Button(path))
{
EditorSceneManager.OpenScene(path);
}
}
EditorGUILayout.EndScrollView();
EditorGUI.EndDisabledGroup();
}
/// <summary>
/// シーン一覧の再読み込み
/// </summary>
void ReloadScenes()
{
this.sceneArray = GetAllSceneAssets().ToArray();
}
/// <summary>
/// プロジェクト内に存在するすべてのシーンファイルを取得する
/// </summary>
static IEnumerable<SceneAsset> GetAllSceneAssets()
{
return AssetDatabase.FindAssets("t:SceneAsset")
.Select(guid => AssetDatabase.GUIDToAssetPath(guid))
.Select(path => AssetDatabase.LoadAssetAtPath(path, typeof(SceneAsset)))
.Where(obj => obj != null)
.Select(obj => (SceneAsset)obj);
}
}
}
ツールを使う
画面上部のメニューから Tools/Scene Launcher を選択するとウィンドウが開きます。
ウィンドウ上に表示されたボタンをクリックするとシーンファイルを開くことができます.
シーンを編集しているときにこのツールを使ってシーンを開いてしまうと現在の編集状態が破棄されてしまうので注意してください