public void OnGUI() { EditorGUILayout.BeginVertical(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Number"); number = EditorGUILayout.IntField(number); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Activated"); activated = EditorGUILayout.Toggle(activated); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Parent"); parent = (ObjectContainerScript)EditorGUILayout.ObjectField(parent, typeof(ObjectContainerScript), true); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("GameObject"); gameobject = (GameObject)EditorGUILayout.ObjectField(gameobject, typeof(GameObject), false); EditorGUILayout.EndHorizontal(); if (GUILayout.Button("Generate multiple object")) { parent.initializeChildrenList(); for (int i = 0; i < number; i++) { var go = (GameObject)PrefabUtility.InstantiatePrefab(gameobject); go.transform.position = new Vector3(0, 0, i); go.SetActive(activated); parent.AddChildren(go); Undo.RegisterCreatedObjectUndo(go, "MultipleGO"); } } EditorGUILayout.EndVertical(); }
public void OnGUI() { EditorGUILayout.BeginVertical(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Floor"); floor = (GameObject) EditorGUILayout.ObjectField(floor, typeof(GameObject), true); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Wall right"); wallRight = (GameObject)EditorGUILayout.ObjectField(wallRight, typeof(GameObject), true); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Wall left"); wallLeft = (GameObject)EditorGUILayout.ObjectField(wallLeft, typeof(GameObject), true); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("End level"); endLevel = (GameObject)EditorGUILayout.ObjectField(endLevel, typeof(GameObject), true); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Level length"); levelLength = EditorGUILayout.IntField(levelLength); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Level width"); levelWidth = EditorGUILayout.IntField(levelWidth); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Number of way"); numberOfWay = EditorGUILayout.IntField(numberOfWay); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Parent obstacle destroyable"); parentObstacleDestroyable = (ObjectContainerScript)EditorGUILayout.ObjectField(parentObstacleDestroyable, typeof(ObjectContainerScript), true); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Number obstacle destroyable"); numberObjectDestroyable = EditorGUILayout.IntField(numberObjectDestroyable); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Parent obstacle undestroyable"); parentObstacleUndestroyable = (ObjectContainerScript)EditorGUILayout.ObjectField(parentObstacleUndestroyable, typeof(ObjectContainerScript), true); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Number obstacle undestroyable"); numberObjectUndestroyable = EditorGUILayout.IntField(numberObjectUndestroyable); EditorGUILayout.EndHorizontal(); if (GUILayout.Button("Generate Level")) { if (levelWidth % 2 == 0) levelWidth++; floor.transform.localScale = Vector3.right * (levelWidth / 10f) + Vector3.up * 1 + Vector3.forward * (levelWidth / 10f + espace / 10f); floor.transform.localPosition = Vector3.forward * (levelLength / 2f + espace / 2f); wallLeft.transform.localScale = Vector3.up * .2f + Vector3.forward * (levelLength + espace); wallLeft.transform.localPosition = Vector3.right * (-levelWidth / 2f) + Vector3.up * .1f + Vector3.forward * (levelLength / 2f + espace / 2f); wallRight.transform.localScale = Vector3.up * .2f + Vector3.forward * (levelLength + espace); wallRight.transform.localPosition = Vector3.right * (levelWidth / 2f) + Vector3.up * .1f + Vector3.forward * (levelLength / 2f + espace / 2f); endLevel.transform.localScale = Vector3.right * levelWidth + Vector3.up * 5; endLevel.transform.localPosition = Vector3.up * 2.5f + Vector3.forward * (levelLength + espace); // 0=gauche, 1=droite, 2=devant numberOfPosition = levelLength * levelWidth; way.Clear(); for (int i = 0; i < numberOfWay; i++) { lastPosition.Set(0, .5f, 0.5f); previousDirection = 2; nbOfForward = 0; while (true) { do { float nb = Random.Range(0f, 1f); if (nb > coefForward && nbOfForward >= 2) { if (lastPosition.x <= -(levelWidth / 2)) newDirection = 1; else if (lastPosition.x >= levelWidth / 2) newDirection = 0; else newDirection = Random.Range(0, 2); } else { newDirection = 2; } } while (newDirection == previousDirection && newDirection != 2); if (newDirection == 2) nbOfForward++; else nbOfForward = 0; if (newDirection == 0) { lastPosition += Vector3.left; } else if (newDirection == 1) { lastPosition += Vector3.right; } else if (newDirection == 2) { lastPosition += Vector3.forward; } bool alreadyIn = false; for (int j = 0; j < way.Count; j++) { Vector3 v = way[j]; if (v.x == lastPosition.x && v.z == lastPosition.z) { alreadyIn = true; break; } } if (!alreadyIn) way.Add(lastPosition); previousDirection = newDirection; if (lastPosition.z + .5 >= levelLength + espace) break; } } undestroyable = parentObstacleUndestroyable.GetChildren(); destroyable = parentObstacleDestroyable.GetChildren(); positionDestroyableobstacle.Clear(); bool find = false; for (int i = 0; i < destroyable.Count; i++) destroyable[i].gameObject.SetActive(false); for (int i = 0; i < undestroyable.Count; i++) undestroyable[i].gameObject.SetActive(false); for (int i = 0; i < destroyable.Count && i < numberObjectDestroyable && numberOfPositionTaken < numberOfPosition; i++) { do { find = false; Vector3 randomV = Vector3.up * .5f; randomV.x = Random.Range(-levelWidth / 2, levelWidth / 2 + 1); randomV.z = Random.Range(0, levelLength) + espace; randomV.z += .5f; for (int j = 0; j < positionDestroyableobstacle.Count; j++) { Vector3 v = positionDestroyableobstacle[j]; if (v.x == randomV.x && v.z == randomV.z) { find = true; break; } } if (!find) { destroyable[i].SetActive(true); numberOfPositionTaken++; positionDestroyableobstacle.Add(randomV); } } while (find == true); } way.AddRange(positionDestroyableobstacle); if (numberObjectDestroyable + numberObjectUndestroyable > levelLength * levelWidth) { numberObjectUndestroyable -= (levelLength * levelWidth) - numberObjectDestroyable; } numberOfPositionTaken = way.Count; for (int i = 0; i < undestroyable.Count && i < numberObjectUndestroyable && numberOfPositionTaken < numberOfPosition; i++) { do { find = false; randomV.Set(Random.Range(-levelWidth / 2, levelWidth / 2 + 1), .5f, Random.Range(0, levelLength) + .5f + espace); for (int j = 0; j < way.Count; j++) { Vector3 v = way[j]; if (v.x == randomV.x && v.z == randomV.z) { find = true; break; } } if (!find) { undestroyable[i].SetActive(true); numberOfPositionTaken++; way.Add(randomV); } } while (find == true && numberOfPositionTaken < numberOfPosition); } } EditorGUILayout.EndVertical(); }