Serialization
Netcode for GameObjects has built-in serialization support for C# and Unity primitive types out-of-the-box, also with ability to further extend network serialization for user defined types implementing INetworkSerializable interface.
| Topic | Description |
|---|---|
| C# primitives | C# primitive types are serialized by built-in serialization code. These types include bool, char, sbyte, byte, short, ushort, int, uint, long, ulong, float, double, and string. |
| Unity primitives | Unity Primitive Color, Color32, Vector2, Vector3, Vector4, Quaternion, Ray, Ray2D types will be serialized by built-in serialization code. |
| Enum types | A user-defined enum type will be serialized by built-in serialization code (with underlying integer type). |
| Arrays | Netcode for GameObjects has built-in serialization code for arrays of C# value-type primitives, like int[], and Unity primitive types. Any arrays of types that aren't handled by the built-in serialization code, such as string[], need to be handled using a container class or structure that implements the INetworkSerializable interface. |
| INetworkSerializable | You can use the INetworkSerializable interface to define custom serializable types. |
| Custom serialization | Create custom serialization types. |
| NetworkObject serialization | GameObjects, NetworkObjects and NetworkBehaviour aren't serializable types so they can't be used in RPCs or NetworkVariables by default. There are two convenience wrappers which can be used to send a reference to a NetworkObject or a NetworkBehaviour over RPCs or NetworkVariables. |
| FastBufferWriter and FastBufferReader | The serialization and deserialization is done via FastBufferWriter and FastBufferReader. These have methods for serializing individual types and methods for serializing packed numbers, but in particular provide a high-performance method called WriteValue()/ReadValue() (for Writers and Readers, respectively) that can extremely quickly write an entire unmanaged struct to a buffer. |