Hi, I have a game where I am custom coding almost everything. Since all the "characters" are custom vehicles, I'm having to manually set network ownership of parts, so all physics, as you may guess, are being done thru local Scripts on the clients, which works reasonably well. I've been testing the game with friends, and I've noticed that the movement of these vehicles is not as smooth as I would like it on other people's games. I was wondering if anybody could tell me which settings to change to increase the communication rate of each client, so that motion appears smoother for other people. I've noticed many physics related settings in the "Networking" tab of studio, but I'm not sure how they correlate, and which, if any would actually affect anything when the game is actually online.
Any expertise would be appreciated!
EDIT: To clarify, I mean client to client thru server, and I know that general internet speed and latency will be a problem in any case. However, there appear to be many settings pertaining to physics in the studio network settings. , which I already have modified slightly to no avail.
As for how the vehicles move, I have custom coded a suspension and movement script utilizing ray tracing and body thrusts for suspension, and a bodyVelocity and body Thrust for friction and overall movement. They work without a hitch on each individual client. You can see them here
My understanding is that all the settings in Studio impact your client only (and possibly only Roblox Studio instead of the client, I'm not sure). Thus, Perci1 is correct. Server-client communication is already quite quick (Audio Visualizer by Dummiez has a TextLabel showing your ping (among other things), and mine shows a ping of 84ms, occasionally jumping up to 151ms - I have gotten better on other non-Roblox games, but not always). When information has to travel from Client A to the server to Client B, pings add up.
All games have to work with this; often games will attempt to predict player behaviour to make the animations smoother. The idea is that you keep animating enemy vehicles with your best guess of where they should be at the current time (ex based on previous control inputs from the player that owns that tank). Should the server later give you information on the current status of an animation (or position of a model), you then update the local animation/part/model with that information.
Some game simulate all the physics on the server. The client may also simulate the physics, but whenever there is a discrepancy, the server's version of reality is the one that is kept (which may cause a "jump" in your character's position whenever the client receives new information from the server). Compared to this method, some advantages/disadvantages of simulating things on the client and transmitting that information to other clients (as you are currently doing):
Advantages -Player vehicles will respond immediately Disadvantages -If anyone is using a compromised Roblox client (I don't know if any exist at the moment or how common they might be), they will be able to teleport anything assigned to them via SetNetworkOwnership, including their vehicle -Opponent tanks may appear to teleport more than using a Server simulation since their tank simulations are being done on someone else's client.
In comparison, using Server Simulation (where all tanks are simulated on the server; clients can attempt the simulation to make smooth animations but their results are not transmitted) sacrifices some of the player vehicle responding immediately but lessens the opponent tanks "teleporting".
Regardless of which strategy you use, you might be able to make things look better by animating all enemy tanks on all clients (potentially through the use of Local Parts -- parts that exist only on the client, accomplished simply by clients generating Parts/models and/or by putting said models in your camera (the latter only being required if you aren't using FilteringEnabled). Note that Local Parts are not officially supported, though they've worked for years.)