Unity4時代にエディター拡張をしている方はUnityEngine.DefaultAsset
というTypeを見た方がいらっしゃると思います。タイミング的には「UnityEngine.Object」のカスタムエディターを作成するときとか。
ですが UnityEngine.DefaultAsset
は internal であるため触ることが出来ませんでした。
DefaultAssetがエディターAPIに移動した
DefaultAsset のクラスが UnityEditor.DefaultAsset
として public になり触れるようになりました。
フォルダーとシーンのカスタムエディターを作成してみる
DefaultAssetInspector.cs
using UnityEngine;
using UnityEditor;
using System.IO;
[CustomEditor(typeof(DefaultAsset))]
public class DefaultAssetInspector : Editor
{
Editor editor;
public override void OnInspectorGUI ()
{
// DefaultAsset の GUI はデフォルトで無効になっているので有効にする
GUI.enabled = true;
var assetPath = AssetDatabase.GetAssetPath (target);
if (AssetDatabase.IsValidFolder (assetPath)) {
Editor.CreateCachedEditor (target, typeof(FolderInspector), ref editor);
} else if (IsSceneAsset (assetPath)) {
Editor.CreateCachedEditor (target, typeof(SceneInspector), ref editor);
} else {
// いらないかも
base.OnInspectorGUI ();
}
if (editor) {
editor.OnInspectorGUI ();
}
}
private bool IsSceneAsset (string assetPath)
{
return Path.GetExtension (assetPath) == ".unity";
}
}
FolderInspector.cs
using UnityEngine;
using UnityEditor;
public class FolderInspector : Editor
{
public override void OnInspectorGUI ()
{
EditorGUILayout.LabelField ("フォルダーだよ!");
}
}
SceneInspector.cs
using UnityEngine;
using UnityEditor;
public class SceneInspector : Editor
{
public override void OnInspectorGUI ()
{
EditorGUILayout.LabelField ("シーンだよ!");
}
}
コードの中で使った Editor.CreateCachedEditor
地味に便利ですね!