I have a very basic solution.
This is my old recoil script. Indeed, it is very basic and disappointing, but it get the job done.
This will work on First Person Camera and Third Person Camera.
Method : Multiplying camera current CFrame with CFrame.Angles
local function changeCamaraRecoilUp(numberOfStep, maxValue, minValue, waitNumber)
for Count = numberOfStep, 1, -1 do
local ValX = maxValue / minValue
camera.CFrame = camera.CFrame * CFrame.Angles(ValX, 0, 0) -- camera is game.Workspace.CurrentCamera
task.wait(waitNumber)
end
end
tool.Activated:Connect(function()
changeCamaraRecoilUp(3, 1, 60, 0.006)
end)