I’m developing an EditorWindow that dynamically creates scenes and saves them in the asset folder and add it to the list, this part of the save works perfectly including saving the name of the scenes in this ScriptableObject file. The problem is when I try to save instantiated prefabs(gameobjects) to use more, I manage to allocate the gameobjects in the list it displays the correct number of elements that I created, but the reference to these gameobjects are lost: The script I have so far is this one:
This part creates a grid needed by the project and instantiates the prefabs
private void CreateGrid(GameObject objectInstance, GameObject parentObject) {
int sceneNum = 0;
for (int x = 0; x < tilesXAxis.value; x++) {
for (int z = 0; z < tilesZAxis.value; z++, sceneNum++) {
float rengeXMove = parentObject.transform.position.x + x * (gridTotalWidth.value / tilesXAxis.value);
float rengeZMove = parentObject.transform.position.z + z * (gridTotalLength.value / tilesZAxis.value);
GameObject _obj = PrefabUtility.InstantiatePrefab(objectInstance, parentObject.transform) as GameObject;
TilesManager _tileCurrent = _obj.GetComponent<TilesManager>();
string _sceneName = CreateScenes((x).ToString() + "_" + z.ToString());
_tileCurrent.sceneName = _sceneName;
_obj.transform.position = new Vector3(rengeXMove, 0, rengeZMove);
//gridData.sceneGridObjects.Add(_obj);
//gridData.landsScenesNames.Add(_sceneName);
AddElementsAtList(_sceneName, _obj, _tileCurrent);
//gridData.sceneGridBlocksTiles.Add(_tileCurrent);
}
}
}
This part is responsible for adding elements to the ScriptableObject list, this part is complicated to understand how to save gameobjects
// Add elements to list :::Add Element At List
void AddElementsAtList(string _addSceneNames, GameObject _addSceneGrid, TilesManager _addSceneGridBlocks) { // ScenesNames
serializedString_LandsScenesNames.InsertArrayElementAtIndex(serializedString_LandsScenesNames.arraySize);
//serializedObj_TerrainPrefab.InsertArrayElementAtIndex(serializedObj_TerrainPrefab.arraySize);
serializedObj_SceneGridObject.InsertArrayElementAtIndex(serializedObj_SceneGridObject.arraySize);
serializedTiles_SceneGridBlocksTiles.InsertArrayElementAtIndex(serializedTiles_SceneGridBlocksTiles.arraySize);
SerializedProperty addSceneNames = serializedString_LandsScenesNames.GetArrayElementAtIndex(serializedString_LandsScenesNames.arraySize - 1);
//SerializedProperty addTerrainPrefab = serializedObj_TerrainPrefab.GetArrayElementAtIndex(serializedObj_TerrainPrefab.arraySize - 1);
SerializedProperty addScenesGrid = serializedObj_SceneGridObject.GetArrayElementAtIndex(serializedObj_SceneGridObject.arraySize - 1);
SerializedProperty addSceneGridBlocks = serializedTiles_SceneGridBlocksTiles.GetArrayElementAtIndex(serializedTiles_SceneGridBlocksTiles.arraySize - 1);
addSceneNames.stringValue = _addSceneNames;
//addTerrainPrefab.objectReferenceValue = _addTerrainPrefab;
addScenesGrid.objectReferenceValue = _addSceneGrid as GameObject;
addSceneGridBlocks.objectReferenceValue = _addSceneGridBlocks;
serializedData_DataGrid.Update();
serializedData_DataGrid.ApplyModifiedProperties();
}