【Unity】Editor上でワンクリックでシーンのLoad、UnLoadを切り替えれる機能

Editor

タイトルでもう完結しておりますが・・・。
Hierarchy上にチェックボックスを設置しそれでシーンのLoad、UnLoad状態を切り替えれる機能 を実装致しました!

マルチシーンエディティング

Unity5.3から複数のシーンを同時に編集する機能(通称:マルチシーンエディティング)が新しく導入されました。

Hierarchy上にシーンファイルをドラッグアンドドロップするだけで簡単に使えて大変便利なのですが、
実装をしていると、片方のシーンは一旦非表示にして、で、また表示してという作業が頻繁に発生するかと思います。
非表示するためにHierarchy上のシーンファイル上で右クリックしてUnload Sceneを選択して
表示するためにはHierarchy上のシーンファイル上で右クリックしてLoad Sceneを選択して・・・・
っと結構めんどくさいです。

そこで、チェックボックスをHierarchy上に設置し、それをON,OFFするだけで非表示・表示を切り替えれるEditor拡張Scriptを作りました!

デモ

demo

ソース

#if UNITY_EDITOR
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEditor;
using UnityEditor.SceneManagement;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;

/// 
/// Hierarchy上にチェックボックスを設置しそれでシーンのLoad、UnLoad状態を切り替えれる機能
/// 
[InitializeOnLoad]
public class EditorSceneSwitcher : Editor {

	static EditorSceneSwitcher () {
		EditorApplication.hierarchyWindowItemOnGUI += (instanceID, rect) => {
			DrawComponentIcons (instanceID, rect);
		};
	}

	static void DrawComponentIcons (int instanceID, Rect rect)
	{
		if(Application.isPlaying) {
			return;
		}

		// チェックボックス表示位置
		rect.x += rect.width - 40;
		rect.width = 40;

		if(EditorUtility.InstanceIDToObject(instanceID)) {
			return;
		}

		var setups = EditorSceneManager.GetSceneManagerSetup();
		if(null == setups || setups.Length <= 0) {
			return;
		}

		var miGetSceneByHandle = typeof(EditorSceneManager).GetMethod("GetSceneByHandle",BindingFlags.NonPublic | BindingFlags.Static);
		Scene s = (Scene)miGetSceneByHandle.Invoke(null, new object[]{instanceID});

		if (s.isLoaded != GUI.Toggle(rect,s.isLoaded,"")){
			for (int i = 0; i < setups.Length; i++){
				if (setups[i].path == s.path){
					setups[i].isLoaded = !s.isLoaded;
					if(s.isLoaded) {
						EditorSceneManager.SaveScene(s);
						EditorSceneManager.CloseScene(s, false);
					} else {
						EditorSceneManager.OpenScene(s.path, OpenSceneMode.Additive);
					}
					break;
				}
			}
		}
	}
}
#endif

GitHub

こちらもGitHubにアップしております!
是非ご活用下さい。
https://github.com/VENIEGAMES/EditorSceneActiveSwitcher-Unity

コメント

タイトルとURLをコピーしました