Good catch! I’ve updated it to use an Atomic model so this shouldn’t be an issue now
Currently it relies on the Atomic streaming mode which ensures all instances are replicated at the same time. If you’re not using streaming, you’ll need to add WaitForChild()s to all of the client scripts to ensure that they wait for the instances in the car to replicate.
These attachments need to be re-aligned with their counterparts to keep the constraint from breaking
If you’d like to change the position of the rear wheels, you can select both wheels, the anti roll bar, and the attachment in the chassis to move them together
Thank you so much for all of this information!, This will help a lot of players. In my case in trying to scale down the model. It would become unstable even with the attachments and constraints being correct and or aligned. The issue turned out to be the mass of the AntiRollBars. By increasing their density so that the mass of the AntiRollBars measured around 2.248 the vehicle became stable and worked perfectly!
You can definitely implement multiple seats, the relevant server code you’ll want to look at is in Car.Scripts.Server.Occupant, which forces a player to sit in the driver seat when they interact with the drive proximity prompt. You can extend this to add prompts for passenger seats.
The client code is in Car.Scripts.Client.ClientController and Car.Scripts.Client.Input.exitHandlerAsync. It disables jumping so the player has to manually exit with a button, but you could probably skip all the client code and have them exit normally.
Also, an annoying bug I have noticed is that the camera jitters whenever there is a lag spike. When driving around my desert, every time the chunks generate and the frames drop by a bit, the camera jiggles. You can see it around 10 seconds into my video.
Honestly, This is one of the best templates I’ve seen to date. All I think it needs is a little fixing on the camera switching, as I think there should be 3rd and 1st person along with a type of cinematic view.
This is a nice easy solution, but if you’re wanting something a little more accurate I tackled a similar issue recently where really curved tracks might cause some players to appear Infront of others when they aren’t because of a tight bend or something.
The solution I came up with is to generate a curve that goes through all the nodes (checkpoints) of the track; I found a catmull rom spline worked well for me. Then when getting distance to checkpoint, use the closest point on that curve from the player which you can use to get players positions on the curve for a more accurate position that takes the layout of the track into account.
I’ll leave this here for whoever needs it explaining, if you’d like a more detailed account feel free to hmu.
Try checking out this curriculum - there are some helpful tips and tricks in there.
I use Substance Designer to create all of my game textures. Substance is an Adobe product and has a licensing cost, but there are free alternatives like Material Maker
The same thing is happening to me. Every time something streams in or out (which happens basically all the time in a city environment like in my game), the camera does the same zooming effect. I thought it had something to do with me rigging a custom car model wrong, but like you said, it just seems to be a thing that happens when lag occurs.
This is a very nice template! Great use of art, and great gameplay! It’s also very easy to customize!
My good friend @poogah05 and I replaced the car body and tires with custom ones he had made as submissions for season 20 in Jailbreak, and we drove it around with a few friends in a Jailbreak map he has.
(P.S. There is a cool ramp jump featuring @poogah05 around 1:15 in the video.)
I love the new Template, and I have published a game using it with some modifications to the vehicle and map (HyperCar Racing - Roblox).
I am wondering how to add a wins system to the game, so when a player comes in 1st, they are given a point in Wins leadertats (which I added). If anyone has suggestions that work, please lmk. I’ve tried multiple ways such as :
local function onPlayerAdded(player)
player.CharacterAdded:Connect(function(character)
character:WaitForChild(“HumanoidRootPart”).Touched:Connect(function(part)
if part.Name == “Finish” then
local wins = player.leaderstats.Wins.Value + 1
player.leaderstats.Wins.Value = wins
end
end)
end)
end