Currently, assemblies paired with a ControllerManager
instance near other unanchored assemblies with different network owners (for example an assembly with an active ControllerManager
instance assigned to Player1 as well as another similar assembly assigned to Player2) start to be simulated locally on clients who aren’t the network owners of such assemblies (for example Player2 locally gains ownership of Player1’s assembly when Player1’s assembly is idle). This issue occurs whenever the ControllerManager
instance is not actively moving. It appears as if other clients (which do not have network ownership of the assembly) start to locally simulate the assembly whenever it is not moving (asleep?) which causes various issues due to differences in properties of the GroundController
and ControllerPartSensor
. The biggest issue with this is using custom methods of detecting the ground (ControllerPartSensor.UpdateType
= “Manual”
) which makes this issue especially visible since other clients don’t perform any sort of casting at all due to the "Manual"
ControllerPartSensor.UpdateType
and makes the ControllerManager
instance completely unusable in multi-player games. Not only that, but the moment the assembly starts moving again, the assembly visually stutters for a moment (being woken up?) before no longer being locally simulated on other clients and behaving as expected, replicating the positions correctly from the true network owner.
This issue does not occur with Humanoid
instances. Humanoids continue to be actively replicated despite being idle or not, which makes the experience a ton smoother and does not cause any weird physics syncing issues or visual stutters after inactivity.
The issue has been successfully reproduced both in studio and in game.
Cannot provide a timestamp of when the issue started happening, as today was the first time I’ve tested it in multi-player.
Video of the issue: https://youtu.be/3rf9MUuAHtc
System Information:
CPU: 11th Gen Intel(R) Core™ i7-11800H @ 2.30GHz
RAM: 32 GB @ 3200 MHz
GPU: NVIDIA GeForce RTX 3070 Laptop GPU
OS: Windows 11
Reproduction file: ControllerManagerReplicationPhysicsIssue.rbxl (65.6 KB)
Reproduction steps:
Open the attached file, head over to the “Test” tab, create a local server with 2 players and click start. The issue should be clearly visible. Pressing the spacebar applies an upwards force, which showcases the replication syncing up again. This issue can also be reproduced in solo play, the issue then appears in server view, however that is a little harder to reproduce as you need to position the propellers with the move tool just close enough to the player owned assembly to trigger the issue.
Expected behavior
Assemblies with a ControllerManager should continue to replicate the position from the actual network owner no matter the circumstances and not be locally simulated by clients without ownership of the assembly when near other assemblies with different network owners.