コード例 #1
0
ファイル: KS_SaveLoad.cs プロジェクト: luodongfu/ks-framework
        /// <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);
        }
コード例 #2
0
ファイル: KS_SaveLoad.cs プロジェクト: luodongfu/ks-framework
        /// <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);
        }