local RunService = game:GetService("RunService")
local player = game.Players.LocalPlayer
local sinWaveNum = 0
RunService.Heartbeat:connect(function()
sinWaveNum = sinWaveNum + .01
Boats[player.Name]:SetPrimaryPartCFrame(Boats[player.Name].Center.CFrame*
CFrame.new(.025,0,0)):toWorldSpace(CFrame.new(0,0,0))*
CFrame.Angles(math.cos(sinWaveNum)/800,0,-math.cos(sinWaveNum)/1000)
end)
Keep this in mind: all of the parts in the 'boat' are anchored and are welded to 1 center piece in the boat model that's also anchored.
I'm trying to make my boat move upon heartbeat but my sinWave function when applied slowly yet surely makes the boat 'crack'. All boat parts stay together, but it just slowly splits apart for some reason. Any ideas on how to fix this?
And if you're wondering, this is how I welded all parts to my boat's center:
local function Weld(p1, p2) --p1 = center piece, p2 = boat part
local w = Instance.new("Weld", p1)
w.Part0 = p1
w.Part1 = p2
w.C1 = p2.CFrame:toObjectSpace(p1.CFrame)
end

4 comments
If SetPrimaryPartCFrame is your only form of movement, can't the parts just be anchored and not welded? I'm pretty sure the "cracking" only happens when welded.
nah it still happens
Your model mustn't be anchored for your welds to work.
but is there any way to do it while it's anchored, i dont want the loose physics for the boat to bounce around