/// <summary> /// Convert Gameobject to saveobject /// </summary> /// <param name="obj">Gameobject to convert</param> /// <returns>Converted Save object</returns> private static KS_SaveObject StoreObject(GameObject obj) { KS_SaveObject saveObject = new KS_SaveObject(); KS_SaveableObject saveable = obj.GetComponent <KS_SaveableObject>(); saveObject.name = obj.name; saveObject.prefabName = saveable.prefab; saveObject.id = saveable.ID; if (obj.transform.parent != null && obj.transform.parent.GetComponent <KS_SaveableObject>() == true) { saveObject.parentId = obj.transform.parent.GetComponent <KS_SaveableObject>().ID; } else { saveObject.parentId = null; } List <object> components_filtered = new List <object>(); object[] components_raw = obj.GetComponents <Component>() as object[]; foreach (object component_raw in components_raw) { if (componentTypesToAdd.Contains(component_raw.GetType().BaseType.FullName)) { components_filtered.Add(component_raw); } } foreach (object component_filtered in components_filtered) { saveObject.objectComponents.Add(StoreComponent(component_filtered)); } saveObject.position = obj.transform.position; saveObject.localScale = obj.transform.localScale; saveObject.rotation = obj.transform.rotation; saveObject.active = obj.activeSelf; return(saveObject); }
/// <summary> /// Restore object from a save files SaveObject /// </summary> /// <param name="saveObject">KS_SaveObject object</param> /// <returns>GameObject from KS_saveObject</returns> public static GameObject RestoreGameObject(KS_SaveObject saveObject) { if (prefabDictionary == null || prefabDictionary.Count <= 0) { GetAllPrefabs(); } if (!prefabDictionary.ContainsKey(saveObject.prefabName)) { Debug.LogWarning("Prefab \"" + saveObject.prefabName + "\" not found, Is it in resources folder?"); return(null); } GameObject retObject = GameObject.Instantiate(prefabDictionary[saveObject.prefabName], saveObject.position, saveObject.rotation); // Fill values retObject.name = saveObject.name; retObject.transform.localScale = saveObject.localScale; retObject.SetActive(saveObject.active); // Add savable object if not present if (!retObject.GetComponent <KS_SaveableObject>()) { retObject.AddComponent <KS_SaveableObject>(); } // Set savable object fields KS_SaveableObject saveable = retObject.GetComponent <KS_SaveableObject>(); saveable.ID = saveObject.id; saveable.ParentID = saveObject.parentId; // Restore componenets foreach (KS_SaveObjectComponent oc in saveObject.objectComponents) { RestoreComponent(oc, ref retObject); } return(retObject); }