サクッとオブジェクト同士を階層化させるエディタ拡張。GameObjectは非対応です
using UnityEngine;
using System.Collections;
using UnityEditor;
/// <summary>
/// サクッとオブジェクト同士を階層化させるエディタ拡張。GameObjectは非対応です
/// </summary>
public class ContainWindow: EditorWindow
{
[MenuItem("Window/ContainWindow")]
private static void Init ()
{
var w = EditorWindow.GetWindow <ContainWindow> ();
w.titleContent = new GUIContent ("ContainWindow");
w.Show ();
}
private Object _parent;
private Object _childObj;
private Object _deleteObj;
private void OnGUI ()
{
EditorGUILayout.LabelField ("サクッとオブジェクト同士を階層化させます");
EditorGUILayout.Space ();
EditorGUILayout.LabelField ("親オブジェクト");
_parent = EditorGUILayout.ObjectField (_parent, typeof(Object), false) as Object;
EditorGUILayout.LabelField ("子供にするオブジェクト");
_childObj = EditorGUILayout.ObjectField (_childObj, typeof(Object), true) as Object;
EditorGUILayout.LabelField ("削除したいオブジェクト");
_deleteObj = EditorGUILayout.ObjectField (_deleteObj, typeof(Object), true) as Object;
if (_deleteObj != null)
{
if (GUILayout.Button ("Delete", GUILayout.Height (30f)))
{
Object.DestroyImmediate (_deleteObj, true);
AssetDatabase.Refresh ();
AssetDatabase.SaveAssets ();
}
}
if (Varidate() == false)
{
return;
}
EditorGUILayout.LabelField("子オブジェクトがコピーされて親子関係になります");
if (GUILayout.Button ("Start Contain", GUILayout.Height (30f)))
{
var obj = Instantiate(_childObj);
// Remove name "(Clone)"
obj.name = _childObj.name;
AssetDatabase.AddObjectToAsset (obj, AssetDatabase.GetAssetPath (_parent));
AssetDatabase.ImportAsset (AssetDatabase.GetAssetPath (_parent));
AssetDatabase.Refresh ();
AssetDatabase.SaveAssets ();
}
}
private bool Varidate()
{
if (_parent == null || _childObj == null)
{
return false;
}
if (_parent is GameObject)
{
_parent = null;
return false;
}
if (_childObj is GameObject)
{
_childObj = null;
return false;
}
if (_parent == _childObj)
{
_childObj = null;
return false;
}
return true;
}
}