Due to the new memory simulation feature in studio I have discovered an issue in my own game. Upon further investigation (the issue was extremely strange and I couldn’t figure out what was causing it), I discovered that it was an unusual overlap of streaming and network ownership.
Essentially, when a part is owner by a player, and that part is streamed out on that client, the part enters into an endless sleeping state. A repro file is attached here:
StreamingSleepRepro.rbxl (18.4 KB)
I tested using a device with 250MB simulated memory (although this does also occur on devices with higher amount of memory, and seems to sometimes happen during loading of new parts on devices that have more than enough memory). The issue seems to resolve itself and work better on devices with higher memory, and parts will reawaken when the player comes near, but on low memory devices the part will enter an infinite sleep state.
If a part enters this infinite sleep state, it is impossible to interact with it using physics. Body movers have no effect, and neither does pushing it with my character. I have also tried toggling some properties like CanCollide and Anchored to no effect. It does seem possible to re-awaken the part by creating local parts inside of them or inside my character (even reawakening parts that are far away) - but this is a quick fix I am using and to be honest I have no idea why it works.
The issue does not occur with parts set to automatic ownership.
As far as I can tell, the issue occurs online and in studio (although online testing is more difficult due to the requirement of having an actual device).
Parts can also enter this strange sleep state if they are a little bit away from the character, and not even actually being streamed out. I am not sure why this happens, but it also seems to only happen on low memory devices.
Videos:
High memory device standing nearby - everything working correctly:
High memory device standing far away - Parts go to “sleep” but only the client owned part actually freezes:
Low memory device - Client owned part freezes and cannot be woken up, while other parts behave (mostly) normally:
Notice that in this video the issue appears immediately, although in some of my tests the red ball behaves normally for a few seconds before freezing.
Notice also that the client does not seem to think that the two other balls are awake. No apparent issues because of this, but it sure is strange.
Since I have a quick fix for this issue I haven’t done thorough research into it, and there may be more edge cases that cause this behaviour. If anything else is needed from me (repro from my in-dev game, etc.) I can offer them if there is staff interest in fixing this.
I hope this issue can be worked out soon as Roblox transitions towards streaming being the standard. This prevents local parts (pets, cars, etc) from behaving predictably and consistently, on the very devices that have the most to gain from streaming.
TL;DR
Low memory devices put parts permanently to sleep if you give them network ownership of the parts. This only seems to happen with StreamingEnabled turned on. The parts can be woken up but instantiating new parts nearby them, but physics interactions cannot re-awaken them.