While testing my custom character controller system, I noticed that once an assembly with a ControllerManager
instance is inside of Terrain water with a GroundController
instance set to be the ActiveController
and close enough to the ground to have it’s Active
property be true, it COMPLETELY breaks the Terrain water buoyancy effect on the assembly, changing the density of the assembly makes absolutely no difference, deleting the ControllerManager
instance does not restore the behavior and this essentially ruins the physics of the part.
It seems like the issue started today, as this has never happened before in any of my tests.
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
Video file: https://youtu.be/IxfpyglbDa4
Repro file: BuoyancyBreakingIssue.rbxl (62.4 KB)
Repro steps:
- Open the file.
- Press run.
- Set the
ActiveController
property of theControllerManager
to theGroundController
instance found underControllerManager
-
GroundController
must show that it’s active, as it is essential into making this issue appear. - Set the
ActiveController
property of theControllerManager
to literally anything, in this case you set it to nil (can also be theSwimController
orAirController
, does not matter, it behaves the exact same.) - Move the part in any single way, and now you can see that buoyancy physics from Terrain water no longer apply to this assembly. Changing to different controllers, setting the
RootPart
property to nil or even simply destroying theControllerManager
instance does not fix the missing buoyancy effect, essentially ruining the part’s physics in Terrain water.
This is really affecting my character controller system as my swimming entirely depends on water buoyancy to move around in the water. This issue makes the assembly instantly sink to the bottom. I haven’t found any workaround for this, so a fix for this is urgently needed.
Expected behavior
Terrain water buoyancy physics should apply regardless of the properties that the ControllerManager has, and should never break.