Vehicles are unable to be loaded and unloaded correctly by Roblox when using streaming. This causes Parts welded to the chassis to not be removed when a vehicle exits streaming radius, and causes them to not stay attached to the vehicle when it enters again. Ideally vehicles should enter/exit streaming range and the model should be loaded as needed.
This bug can be reproduced 100% of the time. I have found that this issue mainly happens when a place has a lot of parts to stream, and on a device with a small amount of memory. Have been testing on a 2013 iPad Air 1st generation. In my test example, no script references are kept around on the test client.
Step 1. Join the place on two accounts. One account should be on a computer that can handle moving the car. The other should be on the lower memory device, this client should stay standing around.
Step 2. Get in the car and drive it out of streaming range of the lower memory device.
Step 3. Drive it back into range and you will see some welded parts get left behind and not stay attached to the chassis.
I have only discovered this bug recently (since a week or two ago) as that is when I have begun working streaming into Robloxian Highschool. This same issue is present in our development build of Robloxian Highschool with streaming enabled.
It seems like Roblox isn’t handling streaming welded parts into the world in the correct order. In Robloxian Highschool, the issue lies with wheels and the car body being left behind when streamed out (they are welded on the server). When a vehicle enters the streaming radius again, there is a good chance that most of the wheels will appear unattached.
I’ll look at your test place, thanks for providing a repro place. Two comments from reading your description:
Just because something has moved beyond the target radius around a player doesn’t mean it will be streamed out. We only stream things out when we detect we are in a low memory situation.
Are the welds being created on the clients? I remember seeing a report in the past where a developer was modifying things on the client. When the parts moved far away and then got close they were re-synced from the server and the client created changes were lost. Could something similar be happening here?
In that specific repro place, no welds are being created on the client. A server script in workspace handles welding the car on the server, and the only local script that is used is parented to the driver player’s backpack. There is no other code in that place that would ever make any client sided changes.
It appears the car model is a child of model that includes the spawn point and some road. Can you make the car a child of the workspace and see if the problem goes away?
You can run into problems if you have parts that have parents that are far away with streaming. I’m worried about the situation where the parent of the car is not streamed to the mobile client.
Those were grouped so I could move them around easily when making the terrain. Just verified that ungrouping the model with the vehicle in it has the same behavior.
Unfortunately I don’t have a work around for you to use yet. I believe this requires the client to be actively deleting regions due to insufficient memory, show it shouldn’t happen very often on most devices.
I noticed this issue a couple weeks back. Can be VERY annoying, it was the cause of Drifting Sim’s “invisible wheels” bug.
A strange workaround did the trick for Drifting Sim’s wheels: Clone the part, weld it as needed and then delete the original. However, this hacky workaround doesn’t seem to work all the time. I tried it for vehicles in my own game, but I get the same results.
Would you happen to have any knowledge of when this bug fix would be shipped? Right now it is unfortunately blocking us from releasing streaming support and opening the game to a wider audience.
We have a fix implemented that should cause the car parts to be reattached properly when it reenters the streamed in area. It will be shipping in client 420 which will start being deployed in the next few weeks. Unfortunately mobile clients like iOS and Android where the fix is needed more will take longer to roll-out.
The fix for parts being left behind is being worked on.
I’m looking forward to an update on this issue as well.
I develop for places that are popular among Malaysian players, who do not have good internet. Streaming is rather essential as the places are quite large; loading the entire map would take forever on poor connections, so disabling streaming would dissuade people from playing and is not a viable option.
I can confirm that the fix CorvusCoraxx mentioned was included in client 420.
For clarity, this fix will cause the parts to reattach correctly upon being reentering the streamed in area. Correction for the issue where the parts initially become detached upon leaving the streamed in area is still in development.
Is there a chance we’ll be able to stream vehicles/assemblies manually with an API? Everything in my game is explicitly replicated and I can’t get vehicles to work consistently with StreamingEnabled because instances aren’t always replicated when I need them, and are often replicated when they don’t need to be.