are your SaveObject Components created at runtime
No, all components statically exist on the object prefabs. The data I want to save is:
- a reference to a toplevel prefab, which is instantiated on load directly from the prefab (if the prefab changes after a save is made, I want the new prefab to be used when loading)
- a list of the data to save for each component (since components are not created at runtime, I don't need to record references or have easy save add them to the object when loading it back)
Please could you show me the junk that it added to the file?
Here's a snippet of the Components section with the "junk" I mentioned:
Code: Select all
"Components" : [
{
"__type" : "Crafter,Assembly-CSharp",
"_ES3Ref" : "7200367471519923903",
"goID" : "7305482433124781229",
"CurrentRecipe" : {
"_ES3Ref" : "3548133366622195416"
},
"InputQueue" : {
},
"OutputQueue" : {{
"_ES3Ref" : "6136114156670819634",
"ObjectPrefab" : {
"_ES3Ref" : "8535742076879409394",
"goID" : "8482832533775620206"
}
}:2
}
}
]
For reference, CurrentRecipe is a (thing derived from a) ScriptableObject, and OutputQueue is a Dictionary<ScriptableObject, int>. Two parts in particular perplex me:
Code: Select all
"__type" : "Crafter,Assembly-CSharp",
"_ES3Ref" : "7200367471519923903",
"goID" : "7305482433124781229",
The only necessary bit is the __type. There is already exactly one `Crafter` Component on this object so it is fully identified by the type.
Code: Select all
"OutputQueue" : {{
"_ES3Ref" : "6136114156670819634",
"ObjectPrefab" : {
"_ES3Ref" : "8535742076879409394",
"goID" : "8482832533775620206"
}
}:2
}
I'd expect OutputQueue to look more like { {"_ES3Ref" : "6136114156670819634"}:2 }. Not sure what ObjectPrefab is but it seems superfluous.
Please could you show me the errors you were getting?
They are errors my code throws when a component expects to be part of an object with other components but they are missing. It appears that ES3 failed to instantiate the toplevel prefab correctly?
Code: Select all
Easy Save 3 Loaded GameObject (Crafter) is missing required component Animator
UnityEngine.Debug:Assert (bool,string)
MonoExtensions:InitComponentFromChildren<UnityEngine.Animator> (UnityEngine.MonoBehaviour,UnityEngine.Animator&,bool) (at Assets/Scripts/ClassExtensions.cs:113)
Crafter:Awake () (at Assets/Building/Crafter.cs:158)
UnityEngine.GameObject:AddComponent (System.Type)
ES3Types.ES3ComponentType:GetOrAddComponent (UnityEngine.GameObject,System.Type) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3ComponentType.cs:114)
ES3Types.ES3ComponentType:ReadObject<object> (ES3Reader) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3ComponentType.cs:82)
ES3Types.ES3ObjectType:Read<object> (ES3Reader) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3ObjectType.cs:52)
ES3Types.ES3ObjectType:Read<object> (ES3Reader) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3ObjectType.cs:47)
ES3Reader:ReadObject<object> (ES3Types.ES3Type) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs:253)
ES3Reader:Read<object> (ES3Types.ES3Type) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs:282)
ES3Types.ES3CollectionType:ReadICollection<object> (ES3Reader,System.Collections.Generic.ICollection`1<object>,ES3Types.ES3Type) (at Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3CollectionType.cs:52)
ES3Types.ES3ArrayType:Read (ES3Reader) (at Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ArrayType.cs:36)
ES3Types.ES3Type:ReadProperties (ES3Reader,object) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3Type.cs:153)
ES3Types.ES3ReflectedObjectType:ReadObject<object> (ES3Reader) (at Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedObjectType.cs:26)
ES3Types.ES3ObjectType:Read<object> (ES3Reader) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3ObjectType.cs:52)
ES3Types.ES3ObjectType:Read<object> (ES3Reader) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3ObjectType.cs:47)
ES3Reader:ReadObject<object> (ES3Types.ES3Type) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs:253)
ES3Reader:Read<object> (ES3Types.ES3Type) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs:282)
ES3Types.ES3ListType:Read (ES3Reader) (at Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ListType.cs:64)
ES3Types.ES3Type:ReadProperties (ES3Reader,object) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3Type.cs:153)
ES3Types.ES3ReflectedObjectType:ReadObject<SaveData> (ES3Reader) (at Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedObjectType.cs:26)
ES3Types.ES3ObjectType:Read<SaveData> (ES3Reader) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3ObjectType.cs:52)
ES3Reader:ReadObject<SaveData> (ES3Types.ES3Type) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs:253)
ES3Reader:Read<SaveData> (ES3Types.ES3Type) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs:282)
ES3Reader:Read<SaveData> (string) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs:201)
ES3:Load<SaveData> (string,ES3Settings) (at Assets/Plugins/Easy Save 3/Scripts/ES3.cs:443)
SaveData:Load3 () (at Assets/Scripts/Serialization/SaveLoad.cs:87)
SaveData:LoadFromFile (int) (at Assets/Scripts/Serialization/SaveLoad.cs:70)
GameManager/<GameLoop>d__25:MoveNext () (at Assets/Scripts/Game/GameManager.cs:115)
System.Runtime.CompilerServices.AsyncTaskMethodBuilder:Start<GameManager/<GameLoop>d__25> (GameManager/<GameLoop>d__25&)
GameManager:GameLoop (TaskScope)
GameManager/<Run>d__19:MoveNext () (at Assets/Scripts/Game/GameManager.cs:74)
System.Runtime.CompilerServices.AsyncTaskMethodBuilder:Start<GameManager/<Run>d__19> (GameManager/<Run>d__19&)
GameManager:Run (TaskScope)
TaskScope/<>c__DisplayClass12_0/<<Start>b__0>d:MoveNext () (at Assets/Scripts/Tasks/TaskScope.cs:47)
System.Runtime.CompilerServices.AsyncVoidMethodBuilder:Start<TaskScope/<>c__DisplayClass12_0/<<Start>b__0>d> (TaskScope/<>c__DisplayClass12_0/<<Start>b__0>d&)
TaskScope/<>c__DisplayClass12_0:<Start>b__0 ()
UnityEngine.UnitySynchronizationContext:ExecuteTasks ()
Easy Save 3 Loaded GameObject (Crafter) is missing required component SaveObject
UnityEngine.Debug:Assert (bool,string)
MonoExtensions:InitComponent<SaveObject> (UnityEngine.MonoBehaviour,SaveObject&,bool) (at Assets/Scripts/ClassExtensions.cs:103)
Crafter:Awake () (at Assets/Building/Crafter.cs:158)
UnityEngine.GameObject:AddComponent (System.Type)
ES3Types.ES3ComponentType:GetOrAddComponent (UnityEngine.GameObject,System.Type) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3ComponentType.cs:114)
ES3Types.ES3ComponentType:ReadObject<object> (ES3Reader) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3ComponentType.cs:82)
ES3Types.ES3ObjectType:Read<object> (ES3Reader) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3ObjectType.cs:52)
ES3Types.ES3ObjectType:Read<object> (ES3Reader) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3ObjectType.cs:47)
ES3Reader:ReadObject<object> (ES3Types.ES3Type) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs:253)
ES3Reader:Read<object> (ES3Types.ES3Type) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs:282)
ES3Types.ES3CollectionType:ReadICollection<object> (ES3Reader,System.Collections.Generic.ICollection`1<object>,ES3Types.ES3Type) (at Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3CollectionType.cs:52)
ES3Types.ES3ArrayType:Read (ES3Reader) (at Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ArrayType.cs:36)
ES3Types.ES3Type:ReadProperties (ES3Reader,object) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3Type.cs:153)
ES3Types.ES3ReflectedObjectType:ReadObject<object> (ES3Reader) (at Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedObjectType.cs:26)
ES3Types.ES3ObjectType:Read<object> (ES3Reader) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3ObjectType.cs:52)
ES3Types.ES3ObjectType:Read<object> (ES3Reader) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3ObjectType.cs:47)
ES3Reader:ReadObject<object> (ES3Types.ES3Type) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs:253)
ES3Reader:Read<object> (ES3Types.ES3Type) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs:282)
ES3Types.ES3ListType:Read (ES3Reader) (at Assets/Plugins/Easy Save 3/Scripts/Types/Collection Types/ES3ListType.cs:64)
ES3Types.ES3Type:ReadProperties (ES3Reader,object) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3Type.cs:153)
ES3Types.ES3ReflectedObjectType:ReadObject<SaveData> (ES3Reader) (at Assets/Plugins/Easy Save 3/Scripts/Types/Reflected Types/ES3ReflectedObjectType.cs:26)
ES3Types.ES3ObjectType:Read<SaveData> (ES3Reader) (at Assets/Plugins/Easy Save 3/Scripts/Types/ES3ObjectType.cs:52)
ES3Reader:ReadObject<SaveData> (ES3Types.ES3Type) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs:253)
ES3Reader:Read<SaveData> (ES3Types.ES3Type) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs:282)
ES3Reader:Read<SaveData> (string) (at Assets/Plugins/Easy Save 3/Scripts/Readers/ES3Reader.cs:201)
ES3:Load<SaveData> (string,ES3Settings) (at Assets/Plugins/Easy Save 3/Scripts/ES3.cs:443)
SaveData:Load3 () (at Assets/Scripts/Serialization/SaveLoad.cs:87)
SaveData:LoadFromFile (int) (at Assets/Scripts/Serialization/SaveLoad.cs:70)
GameManager/<GameLoop>d__25:MoveNext () (at Assets/Scripts/Game/GameManager.cs:115)
System.Runtime.CompilerServices.AsyncTaskMethodBuilder:Start<GameManager/<GameLoop>d__25> (GameManager/<GameLoop>d__25&)
GameManager:GameLoop (TaskScope)
GameManager/<Run>d__19:MoveNext () (at Assets/Scripts/Game/GameManager.cs:74)
System.Runtime.CompilerServices.AsyncTaskMethodBuilder:Start<GameManager/<Run>d__19> (GameManager/<Run>d__19&)
GameManager:Run (TaskScope)
TaskScope/<>c__DisplayClass12_0/<<Start>b__0>d:MoveNext () (at Assets/Scripts/Tasks/TaskScope.cs:47)
System.Runtime.CompilerServices.AsyncVoidMethodBuilder:Start<TaskScope/<>c__DisplayClass12_0/<<Start>b__0>d> (TaskScope/<>c__DisplayClass12_0/<<Start>b__0>d&)
TaskScope/<>c__DisplayClass12_0:<Start>b__0 ()
UnityEngine.UnitySynchronizationContext:ExecuteTasks ()