Hello I attempted to mimic Roblox's shiftlock so I can apply it to mobile players and it works okay but when I equip a tool my character goes a little crazy, sometimes it feels like it's speeds up and slows down.
LocalScript:
local player = game:GetService("Players").LocalPlayer
while not player.Character do wait() end
local humanoidRootPart = player.Character.HumanoidRootPart
local camera = workspace.CurrentCamera
game:GetService("RunService").RenderStepped:Connect(function()
local offset = (camera.CFrame.p - humanoidRootPart.Position).unit
humanoidRootPart.CFrame = CFrame.new(humanoidRootPart.Position) * CFrame.Angles(0, math.pi / 2 - math.atan2(offset.Z, offset.X), 0)
end)
Second thoughts I think it is due to me changing the HumanoidRootPart's CFrame in a LocalScript. The normal way out would be to use RemoteEvents, correct?? But there would be a slight delay and Roblox's shiftlock does not have a delay so neither do I want it.
Thanks for any help!!

4 comments
I recently made a tool that was a bit too big for the character to hold, and that sped up the walkspeed in a way, are you sure it isn't because of the design of the tool?
Well I tested it with a normal part as the handle. I would like to know how to prevent it.
So what the problem for me was that the handle's cancollide was set to true, and it was slightly inside the player's arm. So what you could try is set the tool's parts to cancollide=false and see if that fixes it.
did not work sorry