public override void OnInspectorGUI()
    {
        //base.OnInspectorGUI ();

        ManagersInstantiator mgr = this.target as ManagersInstantiator;

        for (int i = 0; i < mgr.managers.Count; i++)
        {
            Color c = GUI.color;

            EditorGUILayout.BeginHorizontal();

            mgr.managers [i] = EditorGUILayout.ObjectField(mgr.managers [i], typeof(GameObject)) as GameObject;

            if (GUILayout.Button("Up", GUILayout.MaxWidth(25)))
            {
                if (i > 0)
                {
                    GameObject go = mgr.managers [i - 1];
                    mgr.managers [i - 1] = mgr.managers [i];
                    mgr.managers [i]     = go;
                }
            }

            if (GUILayout.Button("Down", GUILayout.MaxWidth(25)))
            {
                if (i < mgr.managers.Count - 1)
                {
                    GameObject go = mgr.managers [i + 1];
                    mgr.managers [i + 1] = mgr.managers [i];
                    mgr.managers [i]     = go;
                }
            }

            GUI.color = Color.red;
            if (GUILayout.Button("Remove", GUILayout.MaxWidth(40)))
            {
                mgr.managers.RemoveAt(i);
            }

            GUI.color = c;

            EditorGUILayout.EndHorizontal();
        }

        if (GUILayout.Button("Add Manager"))
        {
            mgr.managers.Add(null);
        }
    }
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();

        ManagersInstantiator manager = target as ManagersInstantiator;

        prefabs.Clear();

        bool dirty = false;

        if (manager.prefabsToInstantiate != null)
        {
            prefabs.AddRange(manager.prefabsToInstantiate);
        }

        for (int i = 0; i < prefabs.Count; i++)
        {
            GameObject prefab = prefabs[i];

            EditorGUILayout.BeginHorizontal();

            EditorGUILayout.LabelField("Prefab #" + i, GUILayout.MaxWidth(80));

            GameObject newPrefab = (GameObject)EditorGUILayout.ObjectField(prefab, typeof(GameObject), false);

            if (newPrefab != prefab)
            {
                prefabs[i] = newPrefab;
                dirty      = true;
            }

            if (GUILayout.Button("Up"))
            {
                if (i > 0)
                {
                    prefabs.RemoveAt(i);
                    prefabs.Insert(i - 1, prefab);
                    dirty = true;
                }
            }

            if (GUILayout.Button("Down"))
            {
                if (i < prefabs.Count - 1)
                {
                    prefabs.RemoveAt(i);
                    prefabs.Insert(i + 1, prefab);
                    dirty = true;
                }
            }

            if (GUILayout.Button("Del."))
            {
                prefabs.RemoveAt(i);
                dirty = true;
            }

            EditorGUILayout.EndHorizontal();
        }

        if (GUILayout.Button("Add New"))
        {
            prefabs.Add(null);
            dirty = true;
        }

        if (dirty)
        {
            Undo.RecordObject(manager, "Manager Instantiator Modification");

            manager.prefabsToInstantiate = prefabs.ToArray();

            EditorUtility.SetDirty(manager);
        }
    }