public void Load() { using (var stream = new FileStream(this.Path, FileMode.Open)) { var context = new DeserializationContext(); // var policy = SerializationPolicies.Unity; // context.Config.SerializationPolicy = policy; var reader = SerializationUtility.CreateReader(stream, context, DataFormat.JSON); var serializer = Serializer.Get <Transform>(); serializer.ReadValue(reader); } }
/// <summary> /// Load a binary save from a given path. /// </summary> /// <param name="path"></param> public static BinarySave Load(string path) { if (File.Exists(path)) { using (var fileStream = new FileStream(path, FileMode.Open)) { return(SerializationUtility.DeserializeValue <BinarySave>(SerializationUtility.CreateReader(fileStream, new DeserializationContext(), DataFormat.Binary))); } } return(null); }
void Load(Stream stream, DataFormat format = DataFormat.Binary) { var context = new DeserializationContext(); if (RequireSaveGameAttributeEverywhere) { context.Config.SerializationPolicy = _serializationPolicy; } var resolver = new ReferenceResolver(); context.IndexReferenceResolver = resolver; context.StringReferenceResolver = resolver; IDataReader reader = SerializationUtility.CreateReader(stream, context, format); // destroy old prefab instances foreach (SaveGameObject obj in GameObject.FindObjectsOfType <SaveGameObject>()) { GameObject.DestroyImmediate(obj.gameObject); } // set up resolver root objects GameObject[] rootObjects = gameObject.scene.GetRootGameObjects(); resolver.RootObjects = new Dictionary <string, Transform>(rootObjects.Length); foreach (GameObject go in rootObjects) { resolver.RootObjects[go.name] = go.transform; } Type type; if (reader.EnterNode(out type) && reader.CurrentNodeName == "prefabs") { // instantiate saved prefab instances var serializer = Serializer.Get <Transform>(); var prefabsByName = PrefabsByName(); while (reader.EnterNode(out type)) { string prefabName; if (reader.ReadString(out prefabName)) { Transform transform = serializer.ReadValue(reader); Transform instance = null; SaveGameObject prefabObj; if (prefabsByName.TryGetValue(prefabName, out prefabObj)) { instance = GameObject.Instantiate(prefabObj, transform).transform; } else { Debug.LogWarningFormat("Missing prefab {0} in SaveablePrefabs list", prefabName); } resolver.Register(instance); reader.ExitNode(); } } reader.ExitNode(); } if (reader.EnterNode(out type) && reader.CurrentNodeName == "saveables") { var serializer = Serializer.Get <MonoBehaviour>(); while (reader.EnterNode(out type)) { var saveable = serializer.ReadValueWeak(reader) as ISaveable; resolver.Register(saveable); if (saveable != null) { IFormatter formatter = FormatterLocator.GetFormatter(saveable.GetType(), _serializationPolicy); formatter.Deserialize(saveable, reader); saveable.Loaded = true; saveable.OnAfterLoad(); } reader.ExitNode(); } reader.ExitNode(); } }
/// <summary> /// Load a binary save from a given path. /// </summary> /// <param name="path"></param> internal static UniversalSave Load(string path, DataFormat dataFormat) { if (File.Exists(path)) { Dictionary <string, object> dictionary = null; UniversalSave universalSave = null; using (var fileStream = new FileStream(path, FileMode.Open)) { dictionary = SerializationUtility.DeserializeValue <Dictionary <string, object> >(SerializationUtility.CreateReader(fileStream, new DeserializationContext(), dataFormat)); } if (dictionary != null) { return(new UniversalSave() { variables = dictionary }); } using (var fileStream = new FileStream(path, FileMode.Open)) { universalSave = SerializationUtility.DeserializeValue <UniversalSave>(SerializationUtility.CreateReader(fileStream, new DeserializationContext(), dataFormat)); } if (universalSave != null) { return(universalSave); } } return(null); }