OnBeforeSerialize is called twice before OnAfterDeserialize
I'm trying to control the serialization of a custom class I've created, but it seems the method OnBeforeSerialize() is called twice before OnAfterDeserialize() (found out using Debug.Log calls).
Also, the second time it's getting called, the fields are all null, hence my own serialization result in empty values, which then I can't deserialize.
Psuedocode:
[Serializable] public class MyClass : ISerializationCallbackReceiver { public void OnBeforeSerialize() { Debug.Log("OnBeforeSerialize start: " + ""); } public void OnAfterDeserialize() { Debug.Log("OnAfterDeserialize end"); } }
p.s. Sorry if the code doesn't look good. It looks fine in the preview, and then in the post it self the lines won't break. Not really sure how to post it correctly.
Answer by IgorAherne · Mar 18, 2017 at 01:25 AM
How do you instantiate the class?
don't do this:
[SerializeField]
MyClass _instance = new MyClass();
also this might help
Answer by msh91 · Mar 18, 2017 at 08:48 AM
IgorAherne - The class has no relation to the unity framework, so it's not a component (hence no MonoBehaviour) nor a scriptableobject.
How do I instantiate it then?
p.s. The class MyClass is instantiated using new, however it exists inside a component which is attached to a game object. If it matters.
Unity constantly tries to force us to use Property Drawers; Check its tutorials out on youtube, it will help you a lot (sadly I am noob in property drawers).
If you want your custom c# classs to be serialize as a part of some component, you have to keep in $$anonymous$$d that [SerializeField] is a necessity, otherwise unity won't invoke functions of Serialization interface for that variable (I think).
don't forget to read this: http://answers.unity3d.com/questions/1318402/difference-between-inline-constructor-with-seriali.html
Your answer