Skip to content

Conversation

@slarticodefast
Copy link
Member

@slarticodefast slarticodefast commented Jan 6, 2026

Adds a guide to prediction, along with a few code examples and gifs showcasing the results.
I tried writing down everything that needs to be known, let me know if anything is wrong or unclear.

Draft until I had a few contributors and maintainers proofreading this and give feedback.
Especially the section on ApplyingState seems like it could be explained a little better, but it's a complicated topic.

ToDo in a future PR: Update the Basic Networking and you doc to include sections on field deltas, NetSerializableAttribute and how EntityUids are converted into NetEntities by the source generator.

@slarticodefast slarticodefast marked this pull request as draft January 7, 2026 00:10
@Pok27
Copy link

Pok27 commented Jan 7, 2026

Very cool job!

Copy link

@VerinSenpai VerinSenpai left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Partial review. Just some minor wording and grammar nitpicks. Its beautiful 🥺

@VerinSenpai
Copy link

Occurs to me that I reviewed this like a 500 word english essay that's due in 3 weeks. 😅

Copy link
Member

@SlamBamActionman SlamBamActionman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Baller guide. You're the GOAT.

```
Don't forget the client-side system, even if it's empty. Otherwise the client won't be able to instanciate the system class and it will remain unpredicted.

Avoid shared abstract components. Some ancient code is still doing this, but nowadays we just instead put the entire component into `Content.Shared`, even if some datafields are only used on the server or client. This is minimally worse for performance, but makes the code much more readable, simplifies any API methods and makes it easier to use `TryComp` and `Resolve`.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good place to re-mention netSync and serverOnly here!

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wait is serverOnly even mentioned? I think the only thing related to server-only datafields is when you imply not adding AutoNetworkedField to fields that shouldn't be networked.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To be honest I never used serverOnly so far, so no clue. Usually most components just keep the datafield on the client, even if it's only used on the server. Probably because it's just a microoptimization.

Copy link
Member

@Tayrtahn Tayrtahn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking great! Thanks for writing all of this up!

@slarticodefast slarticodefast marked this pull request as ready for review January 27, 2026 19:08
@slarticodefast
Copy link
Member Author

Ok, I have rewritten some explanations and I hope they should be more clear now.
I think this should be good to be merged.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants