Modular Swimming System

There is already a different module that has existed for a while that accomplishes this and more called SwimmablePart.

Im confused what exactly did you modify?

Uh I made sure to scour the forums for any swimming systems that may have already been released i didnt find anything, could you link it?

I modified where the raycast check would happen, and the self var with the parameteter.

I think that just takes up more memory then just checking a string to be honest

For sure, the whole code has memory losses here and there. My mistake was that I made another variable instead of using the parameter. One of your mistakes was using a BoolValue instead of an Attribute.

Alright ill keep that in mind for future release, thank you.

Wait what makes attributes better than boolvalues?

Attributes esentially store a few less things which can free a little memory, while also looking clean from Value messes. It cannot store Objects, though.

1 Like

High performance water: Swimmable part 2.0 - Resources / Community Resources - DevForum | Roblox


Hello, cool module! I’m from the “backwards” post with dot product anyways, I’ve wanted to recommend something for your module (MAX_SPEED : number, WaterName : string, IdleAnimation : Animation, ActionAnimation : Animation, YLaunch : number) With colon " : " so it easier to know what’s what when you are creating so it’s easier for people to know what to type in for a second I thought "Max speed " was a vector3 instead of a number

1 Like

Impressive, very nice. Let’s see Paul Allen’s swimming system

Can a default IdleAnimation and SwimAnimation be added?

1 Like

Long time since this reply, but how do you do chainable set methods?

I would assume it’s like this:

function class:SetSpeed()
    return self

function class:SetPart()
    return self

Since it returns self it could also ‘chain’ methods? Not sure how else you’d do it.

1 Like

Could someone re-write this so it works with normal terrain water? but just replaces the default swim system…

Im trying to use it with a custom made rig and i would rather use terrain water, but i dont really like the default swimming since it rotates the player weird.

how do i set this up, exactly?

is there any access to the game?

Make a local script in StarterPlayerScripts and put this code. Name the swim part in workspace Water. Add two animations in Replicated Storage name one SwimIdle and the other Swim (make your animations).

local rs = game.ReplicatedStorage
local swimidle = rs:WaitForChild("SwimIdle")
local swim = rs:WaitForChild("Swim")

local Swimzone = require(game.ReplicatedStorage:WaitForChild("Swimming"))

local Zone =, "Water", swimidle, swim, 50 )

Zone.startedSwimmingFunction = function()
	print("Started Swimming")

thank you so much! i really appreciate it.

1 Like