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)

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

         task.wait()
      end
   end
end

recoil()
5 Likes

Thank you!! was stuck on it for hours

2 Likes