As a ROBLOX developer, StreamingEnabled is not feasible enough to use in my games. StreamingEnabled has a negative stigma due to past bugs, but AFAIK these are fixed – this is not what the feature request is about. The way StreamingEnabled is designed to behave when it is fully working is the problem: my game has to support instances arbitrarily loading in/out.
If this issue was resolved, it would improve my development experience by not having to worry about:
- Having to change my entire codebase to support dynamically inserted/removed parts
- Code that stores a part in a variable, yields, and then errors when it tries to access the part because it unloaded while the script was yielding
- Having to manually ask the server for info on parts that aren’t loaded e.g. “I want to teleport to this player, but their parts are not loaded on my client. What is their position?”
Much like garbage collecting, a part should never unload if there is a Lua reference to it somewhere – this will prevent bugs with scripts indexing a stored part only for it to error. Also, the client should automatically stream in parts when accessed with WaitForChild. For instance, if I run the following code:
local otherPlayerPosition = workspace.Player2:WaitForChild("HumanoidRootPart").Position myCharacter:MoveTo(otherPlayerPosition)
behind the scenes the client would say “Server, I’m waiting for this part. If it exists, please stream it to me”, the server would stream the HumanoidRootPart to the client, and then the client would finish executing the code.
Not only would this make StreamingEnabled more feasible to use, but it would be a mostly drop-in solution with no extra work required if the developer is using WaitForChild properly on the client.
There are also concerns with the parts StreamingEnabled selects to load/unload not being very pretty. If we ever get LOD, this could potentially be integrated with StreamingEnabled to provide for a better experience. Other than that, StreamingEnabled would only require behind-the-scenes changes to improve which parts are loaded.