- Home /
Question by
adriandevera · Jan 14, 2016 at 11:42 PM ·
guierroreditorwindowbeginscrollview
Editor Window - GUI Error You are pushing more GUIClips than you are popping.
I know this may be an extremely simple solution where every BeginHorizontal or BeginVertical must have a paired EndHorizontal or EndVertical... But for some reason Im overlooking it in my code!
Can anyone spot the issue in mine? using UnityEngine; using UnityEditor; using System.Collections; using System.Collections.Generic;
public class BuildingBluePrints : EditorWindow {
[MenuItem("Hospital Tycoon/Buildings Manager")]
static void Init()
{
EditorWindow.GetWindow(typeof(BuildingBluePrints));
//ensure that there is a Building asset to populate otherwise make it
object buildingDatabase = Resources.Load("BuildingDatabase");
if (buildingDatabase == null)
{
buildingEditorList = CreateBuildingDatabase.createBuildingDatabase();
}
else
{
buildingEditorList = (BuildingDatabaseList)Resources.Load("BuildingDatabase");
}
}
//bool showBulidingDatabase;
public int toolbarInt = 0;
public string[] toolbarStrings = new string[] { "Create Building", "Manage Building" };
static BuildingDatabaseList buildingEditorList = null;
List<bool> manageBuildings = new List<bool>();
Vector2 scrollPosition;
BuildingDatabaseList buildingDatabase;
bool showItem;
void addItem() //add new item to the itemdatabase
{
EditorUtility.SetDirty(buildingEditorList); //message scriptable object for incoming changes
Building newItem = new Building(); //create a empty mask of an item
newItem.buildName = "New Item"; //set the name as "new Item"
buildingEditorList.buildingList.Add(newItem); //and add this to the itemdatabase
EditorUtility.SetDirty(buildingEditorList); //message scriptable object that you added something
}
void OnGUI()
{
GUILayout.Label("Manage your Buildable Blueprints here");
EditorGUILayout.BeginVertical("Box");
GUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
toolbarInt = GUILayout.Toolbar(toolbarInt, toolbarStrings, GUILayout.Width(position.width - 18));
GUILayout.EndHorizontal();
scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);
GUILayout.Space(10);
if (toolbarInt == 0) //if equal 0 than it is "Create Item"
{
//GUI.color = Color.green;
if (GUILayout.Button("Add Item", GUILayout.Width(position.width - 23)))
{
addItem();
showItem = true;
}
if (showItem)
{
GUI.color = Color.white;
GUILayout.BeginVertical("Box", GUILayout.Width(position.width - 23));
try
{
buildingEditorList.buildingList[buildingEditorList.buildingList.Count - 1].buildName = EditorGUILayout.TextField("Item Name", buildingEditorList.buildingList[buildingEditorList.buildingList.Count - 1].buildName, GUILayout.Width(position.width - 30)); //textfield for the itemname which you wanna create
buildingEditorList.buildingList[buildingEditorList.buildingList.Count - 1].buildID = buildingEditorList.buildingList.Count - 1; //itemID getting set automaticly ...its unique...better do not change it :D
GUILayout.BeginHorizontal();
GUILayout.Label("Item Description"); //label ItemDescription
GUILayout.Space(47);
buildingEditorList.buildingList[buildingEditorList.buildingList.Count - 1].buildDesc = EditorGUILayout.TextArea(buildingEditorList.buildingList[buildingEditorList.buildingList.Count - 1].buildDesc, GUILayout.Width(position.width - 180), GUILayout.Height(70)); //Text area for the itemDesc
GUILayout.EndHorizontal();
buildingEditorList.buildingList[buildingEditorList.buildingList.Count - 1].buildIcon = (Sprite)EditorGUILayout.ObjectField("Item Icon", buildingEditorList.buildingList[buildingEditorList.buildingList.Count - 1].buildIcon, typeof(Sprite), false, GUILayout.Width(position.width - 33)); //objectfield for the itemicon for your new item
buildingEditorList.buildingList[buildingEditorList.buildingList.Count - 1].buildModel = (GameObject)EditorGUILayout.ObjectField("Item Model", buildingEditorList.buildingList[buildingEditorList.buildingList.Count - 1].buildModel, typeof(GameObject), false, GUILayout.Width(position.width - 33)); //objectfield for the itemmodel for your new item
//buildingEditorList.buildingList[buildingEditorList.buildingList.Count - 1].buildType = (BuildType)EditorGUILayout.EnumPopup("Item Type", buildingEditorList.buildingList[buildingEditorList.buildingList.Count - 1].buildType, GUILayout.Width(position.width - 33)); //the itemtype which you want to have can be selected with the enumpopup
buildingEditorList.buildingList[buildingEditorList.buildingList.Count - 1].buildCost = EditorGUILayout.IntField("Build Cost", buildingEditorList.buildingList[buildingEditorList.buildingList.Count - 1].buildCost, GUILayout.Width(position.width - 33));
////buildingEditorList.buildingList[buildingEditorList.buildingList.Count - 1].rarity = EditorGUILayout.IntSlider("Rarity", buildingEditorList.buildingList[buildingEditorList.buildingList.Count - 1].rarity, 0, 100); //can be used for successrate?
GUILayout.EndVertical();
buildingEditorList.buildingList[buildingEditorList.buildingList.Count - 1].indexItemInList = 999;
}
catch { }
EditorGUILayout.EndScrollView();
GUILayout.EndVertical();
}
}
}
}
Comment
I think it is because you have EditorGUILayout.BeginVertical("Box"); in line 32 but you don't actually close this one.
Answer by revolute · Jan 15, 2016 at 02:48 AM
Simply put, you request EditorGUILayout.BeginVertical("Box"); per editor gui update but since it is never closed, the stack stays uncleared, and that is why Unity yells "you are not popping enough".