void OnGUI()
    {
        GUILayout.Label("Edit Level", EditorStyles.boldLabel);
        selectedLevel = EditorGUI.ObjectField(new Rect(10, 70, position.width - 20, 16), new GUIContent("Selected Level"), selectedLevel, typeof(levelAsset), true) as levelAsset;

        EditorGUI.LabelField(new Rect(10, 90, position.width - 20, 20), new GUIContent("New Level"), EditorStyles.boldLabel);
        levelName = EditorGUI.TextField(new Rect(10, 110, position.width - 20, 16), new GUIContent("Level Name"), levelName);
        tagRecordSize = EditorGUI.IntField(new Rect(10, 128, position.width - 20, 16), new GUIContent("Tags to Record"), tagRecordSize);

        if (tagsToRecord.Length != tagRecordSize)
        {
            tagsToRecord = new string[tagRecordSize];
        }
        for (int i = 0; i < tagRecordSize; i++)
        {
            float xOffset = 146 + (18 * i);
            tagsToRecord[i] = EditorGUI.TagField(new Rect(160, xOffset, position.width - 170, 16), new GUIContent("Tag"), tagsToRecord[i]);
        }

        if (GUILayout.Button("Save"))
        {
            levelAsset level = CreateInstance<levelAsset>();
            level.levelObjects = getTaggedObjects(tagsToRecord);
            string path = "Assets/" + levelName + ".asset";

            for (int i = 1; i <= 100; i++)
            {
                levelAsset preexist = AssetDatabase.LoadAssetAtPath<levelAsset>(path);
                if(preexist)
                {
                    if (preexist == selectedLevel)
                    {
                        AssetDatabase.CreateAsset(level, path);
                        AssetDatabase.SaveAssets();
                        selectedLevel = AssetDatabase.LoadAssetAtPath<levelAsset>(path);
                        break;
                    }
                    else
                    {
                        path = "Assets/" + levelName + i.ToString() + ".asset";
                    }
                }
                else
                {
                    AssetDatabase.CreateAsset(level, path);
                    AssetDatabase.SaveAssets();
                    selectedLevel = null;
                    break;
                }
            }
        }
        if (GUILayout.Button("Load"))
        {
            loadLevel(selectedLevel);
        }
    }
 void loadLevel(levelAsset level)
 {
     List<levelObject> objects = level.levelObjects;
     for(int i = 0; i< objects.Count; i++)
     {
         GameObject obj = Instantiate(objects[i].prefab) as GameObject;
         Vector2 pos = objects[i].prefabPos;
         obj.transform.position = pos;
     }
 }