Repository navigation
v1.23.0
Drift checks get cheap for large scopes: a drift-check tick with 5,000 entities and 16 audiences went from about a second to a few milliseconds on the server. Hashes are unchanged. RecursiveAI.OneGame.Physics ships as 1.23.0-preview.1.
Added
driftCheckInterval:in the server configuration (ServerConfig.DriftCheckInterval, default 30, 1 to 10,000 ticks),ServerHost.DriftCheckInterval(code wins over the file; set beforeStart),Node.DriftCheckInterval, anddriftCheckIntervalinserver_info. A longer interval costs the server and every client less per tick and finds drift later. It cannot be 0 on a server; out-of-range values are errors.hashHistory,hash_atand cluster hash comparisons do not depend on it.Entity.StateVersionandSyncList.Version: counters that change whenever an entity's synced state (or a list) changes, so caches can be keyed on them.
Changed
- Drift-check ticks no longer re-serialize and re-hash every entity for every audience: each entity caches its full and per-visibility-mask hashes, invalidated by any change (
Entity.StateVersion,SyncList.Version), and the digest folds the world hash in the same pass. Hashes, recordings and the wire are unchanged. A check tick with 5,000 idle 4.8 KB entities and 16 audiences went from about 1,000 ms to about 3 ms on the authority and from about 33 ms to about 0.5 ms on a replica.
Fixed
- 1.22.0:
Connection.Channelreturned an internal send-pacing wrapper instead of the transport for UDP connections, so code that read the client's proven key throughconnection.Channel is IAuthenticatedChannelor closed the client throughconnection.Channel is INetConnectionsilently failed: such a server trusted no one, and clients joined but never received entities.Connection.Channelis the transport again, as before 1.22; pacing is kept internally.