If you disable player swimming via :SetStateEnabled() and then add custom physical properties so that the player may float, the player will be launched in arbitrary directions rather than simply floating on the water’s surface.
Wow I haven’t seen it to this effect yet. It’s been upsetting me recently that you can’t jump underwater and I’ve personally looked into this weird water behavior a few days ago and I’m pretty sure I know what’s happening. In the FreeFall state there’s some code that tries to even out the character upon colliding with certain objects. What is happening here is that the character is colliding with Terrain at the current position of wherever that water voxel is. It will then try to force the character out at the direction of (Character.Position - Terrain.Position) as if terrain was just a part, and since terrain always has its position set to (0, 0, 0) it will just push you away from the origin, so the direction isn’t actually random.
Also, some other weird behavior with water + swimming disabled:
Unless you are in the sitting state, jump commands will be completely swallowed while you’re underwater. (I think this means that if you go into FallingDown underwater you’ll get stuck forever but I haven’t tested that.)
If you’re climbing a ladder/truss and enter water, you will be forced to slowly climb up.
If you reach the top of a ladder/truss under water and have your character try to finish the climb and get on top of it with the forced auto movement your character will start to spazz out.
I’ve been meaning to talk to someone who would actually know what to do to fix this. Hopefully someone at Roblox who actually understands character humanoids and the physics engine can get around to fixing this.