Я новичок в единстве, но я знаю с ++, поэтому у меня есть некоторые основы.
Я пытался сохранить эти переменные в течение 3 часов, и это всегда одна и та же ошибка, независимо от того, что я делаю:
«Исключение SerializationException: тип« UnityEngine.MonoBehaviour »в сборке« UnityEngine.CoreModule, версия = 0.0.0.0, культура = нейтральный, PublicKeyToken = null »не помечен как сериализуемый."
Я не понимаю почему, потому что класс помечен:
using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization;
using UnityEngine;
[System.Serializable()]
public class MoneyHandlerData : MonoBehaviour
{
public int pickaxe = 0;
public int nbDwarves = 1;
public double moneyAccount = 10000;
public double moneyPerSec = 500;
public int bow = 0;
public int nbElves = 0;
}
Вот класс, который я использую для сериализации:
using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using UnityEngine;
public class SaveLoad : MonoBehaviour
{
public MoneyHandlerData save;
public void Saving()
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Create (Application.persistentDataPath + "/save.mst");
bf.Serialize(file, save); //Here's where the problem is
file.Close();
Debug.Log("Game saved");
}
public void Loading()
{
if(File.Exists(Application.persistentDataPath + "/save.mst"))
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(Application.persistentDataPath + "/save.mst",
FileMode.Open);
save = (MoneyHandlerData)bf.Deserialize(file);
file.Close();
Debug.Log("Game loaded");
}
}
}
А вот полное сообщение об ошибке:
SerializationException: Тип 'UnityEngine.MonoBehaviour' в сборке 'UnityEngine.CoreModule, версия = 0.0.0.0, Culture = нейтральный, PublicKeyToken = null' не помечен как сериализуемый.
System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers (тип System.RuntimeType) (в <1f0c1ef1ad524c38bbc5536809c46b48>: 0)
System.Runtime.Serialization.FormatterServices + <> c__DisplayClass9_0.b__0 (System.Runtime.Serialization.MemberHolder _) (в <1f0c1ef1ad524c38bbc5536809c46b48>: 0)
System.Collections.Concurrent.ConcurrentDictionary'2 [TKey, TValue] .GetOrAdd (ключ TKey, System.Func'2 [T, TResult] valueFactory) (в <1f0c1ef1ad524c38bbc5536809c46b48>: 0)
System.Runtime.Serialization.FormatterServices.GetSerializableMembers (тип System.Type, контекст System.Runtime.Serialization.StreamingContext) (в <1f0c1ef1ad524c38bbc5536809c46b48>: 0)
System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo () (в <1f0c1ef1ad524c38bbc5536809c46b48>: 0)
System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize (System.Object obj, System.Runtime.Serialization.ISurrogateSelector surrogateSelector, System.Runtime.Serialization. Преобразователь System.Runtime.Serialization.IFormatterConverter, объект System.Runtime.Serialization.Formatters.Binary.ObjectWriter, связыватель System.Runtime.Serialization.SerializationBinder) (в <1f0c1ef1ad524c38bbc5536809c46b48>: 0)
System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize (System.Object obj, System.Runtime.Serialization.ISurrogateSelector surrogateSelector, System.Runtime. Преобразователь System.Runtime.Serialization.IFormatterConverter, объект System.Runtime.Serialization.Formatters.Binary.ObjectWriter, связыватель System.Runtime.Serialization.SerializationBinder) (в <1f0c1ef1ad524c38bbc5536809c46b48>: 0)
System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize (граф System.Object, System.Runtime.Remoting.Messaging.Header [] inHeaders, System.Runtime.Serialization.Formatters.Binary .__ BinaryWriter serWriter, System.Boolean fCheck) (в <1f0c1ef1ad524c38bbc5536809c46b48>: 0)
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize (System.IO.Stream serializationStream, System.Object graph, System.Runtime.Remoting.Messaging.Header [], System.Boolean fCheck) (в <1f0c1ef1ad524c38bbb55369: 0)
System.Runtime.Serialization.
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize (serial.Stream System.IO.Stream, граф System.Object) (в <1f0c1ef1ad524c38bbc5536809c46b48>: 0)
SaveLoad.Saving () (в разделе Активы / Сценарии / Сохранить / SaveLoad.cs: 18)
Quit.Exit () (в Assets / Scripts / Quit.cs: 11)
UnityEngine.Events.InvokableCall.Invoke () (в C: /buildslave/unity/build/Runtime/Export/UnityEvent/UnityEvent.cs: 166)
UnityEngine.Events.UnityEvent.Invoke () (в C: /buildslave/unity/build/Runtime/Export/UnityEvent/UnityEvent/UnityEvent_0.cs: 58)UnityEngine.UI.Button.Press () (в C: /buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs: 66) UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (в C: /buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs: 108) UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPngine.vent.ventEvent, System.Iventler.Hit.BaseEventData eventData) (в C: /buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs: 50) UnityEngine.EventSystems.ExecuteEvents.Execute [T] (UnityEngine.GityOject.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents + EventFunction'1 [T1] (функция): Update ()
Это едва ли имеет смысл для меня, но если кто-то может просветить меня, пожалуйста, вы бы макМой день (извините, если сообщение слишком длинное)
Спасибо