【Unity】Unity エディタでのシーン管理拡張ツール(ヒエラルキーへの登録)

「Unity エディタでのシーン管理拡張ツール」は、Unityのメニューバーにカスタムオプションを追加し、異なるシーン構成を簡単に切り替えてロードできる機能を提供します。開発者は事前に設定された複数のシーンセットから選択し、シングルモードまたはアディティブモードでシーンを開くことができ、開発プロセスの効率化とシーン管理の柔軟性が向上します。

実行中の様子

カスタムメニューの作成

Unityでメニューを介して軌道を選択できるようにするカスタムエディタスクリプトのサンプルを作成しましょう。ここでは、メニューから異なるシーン構成を選択してロードすることができるように設計します。これは、プロジェクトのニーズに応じてさまざまなシーン構成をすぐに切り替えられるようにするための便利なツールです。

シーンロード用メニューアイテムの追加

以下のスクリプトは、Unityのメニューバーに新しい項目を追加し、そのメニューから複数のシーン構成を選択してロードする機能を実装します。

基本サンプル

using UnityEngine;
using UnityEditor;
using UnityEditor.SceneManagement;

public class SceneMenuLoader : ScriptableObject
{
    [MenuItem("Scene Management/Load Scene Set 1")]
    public static void LoadSceneSet1()
    {
        EditorSceneManager.OpenScene("Assets/Scenes/Scene1.unity", OpenSceneMode.Single);
        EditorSceneManager.OpenScene("Assets/Scenes/Scene2.unity", OpenSceneMode.Additive);
    }

    [MenuItem("Scene Management/Load Scene Set 2")]
    public static void LoadSceneSet2()
    {
        EditorSceneManager.OpenScene("Assets/Scenes/Scene3.unity", OpenSceneMode.Single);
        EditorSceneManager.OpenScene("Assets/Scenes/Scene4.unity", OpenSceneMode.Additive);
    }

    // 他のシーン構成も同様にメニューに追加可能
    [MenuItem("Scene Management/Load Scene Set 3")]
    public static void LoadSceneSet3()
    {
        EditorSceneManager.OpenScene("Assets/Scenes/Scene5.unity", OpenSceneMode.Single);
        EditorSceneManager.OpenScene("Assets/Scenes/Scene6.unity", OpenSceneMode.Additive);
    }
}

上記「実行中の様子ビデオ」でのサンプル

using UnityEngine;
using UnityEditor;
using UnityEditor.SceneManagement;

public class SceneMenuLoader : ScriptableObject
{
    [MenuItem("Scene Management/Load Scene Set 1")]
    public static void LoadSceneSet1()
    {
        EditorSceneManager.OpenScene("Assets/Scenes/MainScene.unity", OpenSceneMode.Single);
        EditorSceneManager.OpenScene("Assets/Scenes/UIScene.unity", OpenSceneMode.Additive);
    }

    [MenuItem("Scene Management/Load Scene Set 2")]
    public static void LoadSceneSet2()
    {
        EditorSceneManager.OpenScene("Assets/Scenes/MainScene.unity", OpenSceneMode.Single);
    }

    // 他のシーン構成も同様にメニューに追加可能
    [MenuItem("Scene Management/Load Scene Set 3")]
    public static void LoadSceneSet3()
    {
        EditorSceneManager.OpenScene("Assets/Scenes/UIScene.unity", OpenSceneMode.Single);
    }
}

スクリプトの機能

  • メニュー項目の追加: MenuItem 属性を使用して、Unityのメニューバーに新しいオプションを追加します。
  • シーンのロード: 選択したメニュー項目に応じて、異なるシーンセットをロードします。OpenSceneMode.Single は現在のシーンを置き換え、OpenSceneMode.Additive は現在のシーンに追加します。

使用方法

  1. スクリプトの保存: このスクリプトをプロジェクトの Assets/Editor ディレクトリ内に保存します。Editor ディレクトリが存在しない場合は作成してください。
  2. Unityの再起動: (必要に応じて)スクリプトを保存後、Unityエディタを再起動して、メニューに新しい項目が表示されるか確認します。
  3. シーンのロード: メニューバーから「Scene Management」を選び、表示されるオプションから必要なシーンセットを選択します。

Editorフォルダに保存する理由

Unityでエディタスクリプトを作成する際には、そのスクリプトをEditorフォルダ内に配置することが必要です。これにはいくつかの理由があります:

  1. エディタコードの分離: Editorフォルダにスクリプトを置くことで、そのコードがゲームの実行時には含まれないようになります。エディタ専用の機能はゲームビルドに不要なため、この分離が重要です。
  2. ビルドの最適化: エディタ専用スクリプトがゲームビルドに含まれないため、最終的なアプリケーションのサイズを小さく保ち、パフォーマンスを向上させることができます。
  3. エディタ機能の有効化: Editorフォルダ内のスクリプトは、Unityエディタが起動している間だけ有効になります。これにより、エディタでのみ機能する特別なツールや機能を作成することが可能です。

Unityプロジェクト内にEditorフォルダが存在しない場合は、新しく作成する必要があります。通常、Assetsフォルダ直下にEditorフォルダを設置します。このフォルダ内に配置されたスクリプトは、Unityのエディタ環境でのみ動作し、ビルドプロセスでは無視されます。

Unity

Posted by hidepon