Posted at

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