【Unity】Unity エディタでのシーン管理拡張ツール(保存、読み出し)
Unityのエディターでマルチシーンのヒエラルキー表示を直接保存し、後から読み出す標準的な機能は提供されていません。しかし、Unityのエディタスクリプトを活用してこのような機能を実現するカスタムソリューションを作成することは可能です。
実行中の様子
カスタムソリューションのアプローチ
以下は、エディタのヒエラルキーの状態を保存し、読み出すための基本的なアプローチを示すアイデアです:
- シーンの状態の記録:
- Unityの
SceneManager
を使用して、開かれているすべてのシーンとそれぞれのシーンにおけるオブジェクトの状態(有効/無効)を記録します。 - これをスクリプトを通じてJSONやXML形式でファイルに保存します。
- Unityの
- エディタウィンドウの作成:
- カスタムエディタウィンドウを作成し、保存したシーン状態を読み出して再現する機能を提供します。
- ユーザーが保存した状態を選択し、その状態をヒエラルキーに反映させることができるボタンを設置します。
サンプルスクリプト
以下は、シーンの情報を保存し、読み出すための基本的なスクリプトの例です。完全な機能を持たせるにはさらに拡張が必要です。
using UnityEngine;
using UnityEditor;
using UnityEditor.SceneManagement;
using System.Collections.Generic;
using System.IO;
public class SceneStateSaver : EditorWindow
{
[MenuItem("Tools/Scene State Saver")]
public static void ShowWindow()
{
GetWindow<SceneStateSaver>("Scene State Saver");
}
private void OnGUI()
{
if (GUILayout.Button("Save Scene State"))
{
SaveCurrentSceneState();
}
if (GUILayout.Button("Load Scene State"))
{
LoadSceneState();
}
}
void SaveCurrentSceneState()
{
var scenes = new List<string>();
for (int i = 0; i < SceneManager.sceneCount; i++)
{
var scene = SceneManager.GetSceneAt(i);
if (scene.isLoaded)
{
scenes.Add(scene.path);
}
}
File.WriteAllLines("SceneState.txt", scenes.ToArray());
}
void LoadSceneState()
{
if (File.Exists("SceneState.txt"))
{
string[] scenes = File.ReadAllLines("SceneState.txt");
foreach (string scene in scenes)
{
EditorSceneManager.OpenScene(scene, OpenSceneMode.Additive);
}
}
}
}
自動作成されるシーン内容保存ファイル
SceneState.txtファイル
プロジェクトの直下のフォルダに作成されます
Gitでも管理されます
Assets/Scenes/MainScene.unity
Assets/Scenes/UIScene.unity
考慮事項
- 実際には、シーンの有効/無効状態やオブジェクトの状態も保存する必要があります。上記のスクリプトはシンプルなバージョンであり、実際のプロジェクトにはカスタマイズが必要です。
- 大規模なプロジェクトやチーム環境では、このようなツールが特に有用ですが、他の開発者との整合性を考慮することも重要です。
この方法でUnityエディターのマルチシーンヒエラルキー状態を柔軟に管理することが可能になります。
ディスカッション
コメント一覧
まだ、コメントがありません