public void OnGUI() { GUILayout.Label("Infinite Object Persistence", "BoldLabel"); GUILayout.Label("1. Generate desired tracks using rules and probabilities"); GUILayout.Label("2. Hit play in Unity"); GUILayout.Label("3. Add extra objects (such as tutorial triggers)"); GUILayout.Label("4. Click \"Persist\""); GUILayout.Space(10); if (GUILayout.Button("Persist")) { saveLocation = EditorUtility.SaveFilePanelInProject("Save Location", "InfiniteObjectPersistence", "prefab", ""); if (saveLocation.Length == 0) { return; } GameObject infiniteObjectsGroup = GameObject.Find("Infinite Objects"); if (infiniteObjectsGroup != null) { GameObject persistGameObject = new GameObject(); InfiniteObjectPersistence persistence = persistGameObject.AddComponent <InfiniteObjectPersistence>() as InfiniteObjectPersistence; // Persist the Infinite Object Manager Data InfiniteObjectGenerator infiniteObjectGenerator = infiniteObjectsGroup.GetComponent <InfiniteObjectGenerator>(); infiniteObjectGenerator.saveInfiniteObjectPersistence(ref persistence); // Persist the Infinite Object History Data InfiniteObjectHistory infiniteObjectHistory = infiniteObjectsGroup.GetComponent <InfiniteObjectHistory>(); infiniteObjectHistory.saveInfiniteObjectPersistence(ref persistence); for (int i = infiniteObjectsGroup.transform.childCount - 1; i >= 0; --i) { infiniteObjectsGroup.transform.GetChild(i).parent = persistGameObject.transform; } EditorUtility.SetDirty(persistGameObject); PrefabUtility.CreatePrefab(saveLocation, persistGameObject); for (int i = persistGameObject.transform.childCount - 1; i >= 0; --i) { persistGameObject.transform.GetChild(i).parent = infiniteObjectsGroup.transform; } DestroyImmediate(persistGameObject); Debug.Log("Infinite Object Data Persisted!"); } else { Debug.Log("Error: Unable to find the Infinite Objects Game Object"); } } }