Unity
unity5

Unity5でpublicになったDefaultAsset

More than 3 years have passed since last update.

Unity4時代にエディター拡張をしている方はUnityEngine.DefaultAssetというTypeを見た方がいらっしゃると思います。タイミング的には「UnityEngine.Object」のカスタムエディターを作成するときとか。

ss_2015-03-08_16_47_58.png

ですが UnityEngine.DefaultAsset は internal であるため触ることが出来ませんでした。

DefaultAssetがエディターAPIに移動した

DefaultAsset のクラスが UnityEditor.DefaultAsset として public になり触れるようになりました。

フォルダーとシーンのカスタムエディターを作成してみる

BpAyKMtECK.gif

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 地味に便利ですね!