6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Unity拡張】シーンファイルを開くウィンドウを作ったら便利だった

Posted at

はじめに

Unityを使っていると、シーンファイル(.unity)を開くという作業が数えきれないほど発生するかと思います。

プロジェクトに存在するファイルが少ないうちはシーンファイルを直接クリックして開くだけでも特に困ることはないのですが、ファイルが増えてくると目的のシーンファイルを探すのに手間がかかるようになってきます。

そこで、プロジェクト内に存在するシーンファイルをウィンドウ上から直接開くウィンドウを作ってみました。

環境

Unity5.6.1f3
Windows 10

作ったものについて

image.png

ウィンドウ上にシーンの一覧がボタンで表示されるようなものを作ってみました。
ボタンをクリックすると対応するシーンを開くことができます。

ソースコード

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 を選択するとウィンドウが開きます。
image.png

ウィンドウ上に表示されたボタンをクリックするとシーンファイルを開くことができます.
image.png

シーンを編集しているときにこのツールを使ってシーンを開いてしまうと現在の編集状態が破棄されてしまうので注意してください

6
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?