> For the complete documentation index, see [llms.txt](https://fish-networking.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://fish-networking.gitbook.io/docs/guides/features/network-communication/synchronizing/custom-synctype.md).

# Custom SyncType

For example: if you have a data container with many variables you probably don't want to send the entire container when you change it, as a SyncVar would. By making a custom SyncType you can customize the behavior entirely; this is how other SyncType work.

```csharp
/* If one of these values change you
* probably don't want to send the
* entire container. A custom SyncType
* is perfect for only sending what is changed. */
[System.Serializable]
public struct MyContainer
{
    public int LeftArmHealth;
    public int RightArmHealth;
    public int LeftLegHealth;
    public int RightLeftHealth;            
}
```

Custom SyncTypes follow the same rules as other SyncTypes. Internally other SyncTypes inherit from SyncBase, and your type must as well. In addition, you must implement the *ICustomSync* interface.

```csharp
public class SyncMyContainer : SyncBase, ICustomSync
{
    /* If you intend to serialize your type
    * as a whole at any point in your custom
    * SyncType and would like the automatic
    * serializers to include it then use
    * GetSerializedType() to return the type.
    * In this case, the type is MyContainer.
    * If you do not need a serializer generated
    * you may return null. */
    public object GetSerializedType() => typeof(MyContainer);
}

public class YourClass
{
    private readonly SyncMyContainer _myContainer = new();
}
```

Given how flexible a custom SyncType may be there is not a one-size fits all example. You may view several custom examples within your FishNet import under `FishNet/Demos/CustomSyncType`.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://fish-networking.gitbook.io/docs/guides/features/network-communication/synchronizing/custom-synctype.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
