How to make an efficient vehicle

One of my current vehicles uses RemoteEvents to update the steering and movement speed. Here’s how it works:

  1. User presses the “W” key (to go forward)
  2. RemoteEvent with special parameters is fired (FireServer(), with parameters to determine which direction is needed)
  3. Speed of some constraints is set and the vehicle moves as normal.

In all of this, NO network ownership is set.
The problem with this method is that it takes almost 1 full second for the effects to take place. It’s not an assembly problem, it works just as fine, but the RemoteEvents take too long to process. Is there anyway I can make it faster? Client-sided movement while setting the network owner to the player?

A good example of what I want to make is Roblox’s Endorsed car models. Those things are very fast network-wise

Seems like you know.

Just set the network owner to the player and change the constraint settings on the client.

https://create.roblox.com/docs/physics/network-ownership

I believe an exploiter is going to easily ruin that system, right?


While still considering the method you said, and also that I’m no master in network ownership, you mean locally changing the constraint speed is going to take effect on the Server too? (When the client disconnects the server becomes the owner again)

If a client is the network owner of an assembly, any changes the client makes relating to the assembly’s physics will be replicated to the server and other clients without the need to use RemoteEvents. Unfortunately since clients cannot be trusted, you’d still need to keep track of the vehicle on the server-side in-order to make sure that no undesirable behavior is occurring (as an example: checking to make sure that the vehicle is travelling at a speed that’s close to its true maximum)

1 Like

Most car systems for movement usually use the default properties in the VehicleSeat, why not use that? If you want performance client wise then you could use UnreliableRemoteEvents which are faster but as it says they are unreliable. I don’t think :SetNetworkOwner() would be a viable option but you could try that.

I’d think a VehicleSeat could also work, yes. But overall, I’m trying to avoid anything that has to do with RemoteEvents, whether they are reliable or not

Then use VehicleSeats, they don’t use RemoteEvents.