# Tweening Camera Angle. (Not CFrame)

making recoil for a gun, but when I try tweening the camera angle using CFrame = CFrame * Cframe.Angles() it doesn’t work to how I want it, it would stay at the cframe I activate it at, and I don’t want that, any help is appreciated!

You can lerp it by the amount you want then if you want it to come back do

``````cam.CFrame = cam.CFrame:Lerp(CFrame.new(), duration)
``````

Like this?
` workspace.Camera.CFrame = workspace.Camera.CFrame:Lerp(workspace.Camera.CFrame * CFrame.Angles(0.6,0,0), 1) `

would would it last for a second?

Yes, but I would recommend doing around 0.1 because 1 is really slow for recoil.

Are you sure the second arguement is time, because it seems like its percentage.

I think the problem is the amount you are multiplying the camera CFrame by. Looking at the CFrameAngles part I would suggest you use math.rad(degrees) to get a more accurate result.

Yep I did that, `workspace.Camera.CFrame = workspace.Camera.CFrame:Lerp(workspace.Camera.CFrame * CFrame.Angles(-5,0,0), 0.1) `

But it seems to instant, unlike a tween

1 Like

You can slowly increase the second argument until you are satisfied.

1 Like

Tried doesn’t lower the speed in any way instead it increased the percentage of the lerp

1 Like

Try that:

``````local function recoil()
local speed = .25
local rotation = CFrame.Angles(math.rad(30), 0, 0)

for i = 0, 1, speed do
local targetCFrame = camera.CFrame * rotation
camera.CFrame = camera.CFrame:Lerp(targetCFrame, i)

wait()
end
end

recoil()
``````
2 Likes

Lowers the firing rate. which is a problem.

1 Like

My fault, just wrap it in a spawn:

``````local function recoil()
local speed = .25
local rotation = CFrame.Angles(math.rad(30), 0, 0)

for i = 0, 1, speed do
local targetCFrame = camera.CFrame * rotation
camera.CFrame = camera.CFrame:Lerp(targetCFrame, i)