Netcode SimulationTickRate vs NetworkTickRate

Hi guys, I’m loving Netcode so far - just trying to work out how to adapt it to my situation.

In my large scale RTS (30k units) I don’t need a high simulation tick and 10/sec is fine. However there are so many units that it would be great to have network packets sent at a high rate (60/sec). This way it would be updating the oldest unit snapshots all of the time without having to wait for a simulation tick.

The doc states that SimulationTickRate must be divisible by NetworkTickRate. which sounds like the opposite of what I am looking for. I was wondering what NetworkTickRate actually does. What would be the scenario where you would like the server to process multiple times but not send any data?

Netcode currently seems like it must have a server tick to send a packet. That is not ideal for me because if I actually run the simulation then that will update the data - causing high-importance ghosts to get updating and preventing low-importance ghosts from getting a message.

One workaround I can think of is to set my SimulationTickRate to 60 but then manually prevent my system by running with mySystem.Enabled = Time.frameCount % 10 == 0. In this way Netcode will be running at a high rate but my sim still runs at a low rate - chunks are not changed therefore Netcode will have nothing to send except low-importance ghosts.

Will there ever be an “unbound” network tick? Ideally we would send as many data updates as the network connection can handle.

Thanks!

This idea but it didn’t work out as it disables interpolation and my object just snaps to the new positions. I guess this is also a bad idea because I would need my clientside predicted sim rate to be high and I think they have to match.

This feels a bit counter intuitive. If your networkTickRate is higher than the Simulation tickRate, then, what should the “network loop” do in between simulation ticks ? the simulation tick did not happen so there is no new state to process for sending.

I think what you want is to run your simulation at 10/sec and synchronise has much entities/data has possible in between.
So you want your network ‘sending’ system to run multiple times per simulation tick to go through as much entities as possible by descending order or priority.

In that case, I saw some posts in this forum that talked about runing a system multiple times using the IFixedRateManager maybe you can look into that.

Or you could maybe ‘manually’ make all your network stuff into a group at the very end of loop and run it as long as the total loop time does not exceed a give amount of time and as long as there is data to process. after that you loop again into the simulation.

Yeah that’s what I need. I dont understand the underlying systems enough but i’d guess that running systems multiple times would stuff something up.