Words Of Caution


The serialization system is of course designed to be as durable and robust as we could make it. When set to resilient mode, it is very fault tolerant, handles data corruption fairly well, and also tolerates data types changing under its feet. For example, should you change a Vector3 field to a Vector4 field, your old x,y,z values will be retained. We have done our very best to make it a reliable system.

Even so, using Odin's serialization means making yourself very dependent on a complicated system, and also makes it far harder to remove Odin from your project, should you ever wish to. (See Uninstalling Odin and Best Practices)

It also means sacrificing some performance for the increased flexibility you gain. When using the binary format, Odin's serialization is fast, but since it has to piggyback on Unity's serialization, it literally cannot be quite as fast as Unity's.

Additionally, it is very easy to let the freedom of Odin's serialization system get to your head, and quickly overcomplicate things. It is very easy to get carried away and shoot yourself in the foot. There are strong arguments to be made for keeping your data structures as simple as possible, and polymorphism, nested dictionaries and cyclic graphs are all but simple. We believe there are instances where the added complexity is more than justified - however, there are also cases where it is not, and it is important to keep this in mind.

Finally, making the custom serialization work with prefab instances has necessitated creating our own custom prefab modification system that lies on top of Unity's own, that applies to all inspector-visible data serialized with Odin. While it has seen a lot of beta testing and has been successfully used "in the field", it is possible that there are still subtle issues, so it is advisable to modify specially serialized prefab instances with care and not depend on the custom prefab modification system for critical data until you are confident that it reliably does what you need.

It would therefore be best to avoid using Odin's serialization where it is not needed, as you should always minimize your exposure to possible failure modes, however remote.