I create a game, where level design is done generating different level objects. So far I’ve been generating the level it when entering playmode, but I would like to change that, so it’s done in editor mode.
I’m not that skilled in editor scripting, so I would like to know, if I’m doing it right.
My script (stripped down to the very basics of creating level objects):
using UnityEngine;
using System.Collections;
public class LevelElementGenerator : MonoBehaviour
{
public int amountOfLevelElements = 1;
public GameObject masterLevelElementGO;
private LevelElement[] levelElements = new LevelElement[0];
public void ChangeAmountOfLevelElements()
{
if (!masterLevelElementGO)
{
Debug.LogError("Master Level Element Game Object not assigned!");
return;
}
if (!masterLevelElementGO.GetComponent<LevelElement>())
{
Debug.LogError("Master Level Element Game Object haven't got a Level Element!");
return;
}
for (int i = 0; i < levelElements.Length; i++)
{
DestroyImmediate(levelElements*.gameObject);*
-
}*
-
levelElements = new LevelElement[amountOfLevelElements];*
-
for (int i = 0; i < levelElements.Length; i++)*
-
{*
-
GameObject go = Instantiate(masterLevelElementGO) as GameObject;*
-
go.transform.parent = transform;*
_ levelElements = go.GetComponent();_
* }*
* }*
}
And the editor script:
using UnityEngine;
using System.Collections;
using UnityEditor;
[CustomEditor(typeof(LevelElementGenerator))]
public class LevelElementGeneratorEditor : Editor
{
* private LevelElementGenerator levelElementGenerator;*
* private void OnEnable()*
* {*
* levelElementGenerator = (LevelElementGenerator)target;*
* }*
* public override void OnInspectorGUI()*
* {*
* DrawDefaultInspector();*
* if (GUILayout.Button(“Change Amount”))*
* {*
* levelElementGenerator.ChangeAmountOfLevelElements();*
* }*
* }*
}
It seems to work, but I’m very much in doubt, if it’s the right way to do it…
Could it be done better/smarter?
Reading the [DestroyImmediate documentation][1], I get worried. It states:
> Also note that you should never iterate through arrays and destroy the elements you are iterating over. This will cause serious problems (as a general programming practice, not just in Unity).
Isn’t that exactly what I’m doing? What “serious problems” does it refer to - do I face great dangers?
Any solutions or comments are most welcome! I highly value any thoughts that help me understand this better
_*[1]: http://docs.unity3d.com/ScriptReference/Object.DestroyImmediate.html*_