I am wanting players boats to not be able to climb over walls. I can’t do invisible walls, as won’t feel nice for the user experience. Ideally, the boat should never go above a specific Y value.


function BoatController:UpdateMovement(deltaTime)
local MoveVector = self.ControlModule:GetMoveVector() -- Player controls
script.Inputs.Forward.Value = MoveVector.Z <= -0.1 -- Forward -> -1 Y
script.Inputs.Backward.Value = MoveVector.Z >= 0.1 -- Backward -> 1 Y
script.Inputs.Right.Value = MoveVector.X >= 0.1 -- Right -> 1 X
script.Inputs.Left.Value = MoveVector.X <= -0.1 -- Left -> -1 X
if self.CurrentBoat then
local NewDriveVector = Vector3.new(
0,
0,
math.clamp(script.ForwardAmount.Value * script.SlowdownPercent.Value, -1, 1)
)
local BoatBaseCFrame = self.CurrentBoat.CFrame
local TrueDirectionVector = BoatBaseCFrame:VectorToWorldSpace(NewDriveVector)
local HorizontalVector = TrueDirectionVector * Vector3.new(1, 0, 1)
local Speed = self.BoatMaxSpeed
self.BodyVelocity.Velocity = HorizontalVector * Speed
local Multiplier = math.sign(NewDriveVector.Z)
self.BodyGyro.CFrame *= CFrame.Angles(0, math.rad((self.Turn / 10) * Vector3.new(0, 0, NewDriveVector.Z).Magnitude * Multiplier), 0)
end
end