Issue with Camera Rotating Screenshake

The only reason the camera seems to “snap” is due to the fact you move the players character model.

For other “moves” it should be a similar fix to what I proposed but on a different axis, I’m pretty sure.

If you could please ask further questions to find a solution, or mark one of the answers as a solution, that’d be great.

If the screenshake breaks when I move the character model then it’s a very wonky screenshake, which is why I’m trying to fix it. Also, I’m generally just waiting for more people to propose more solutions, as none of them so far are fitting or functional although I do very much appreciate the help.

Why not use the CameraOffset property of the Humanoid? It might not look identical to your current screenshake however if you use it properly it will produce a similar result.

1 Like

Actually, I tried it before this and have used it before, but it really doesn’t fit the sort of style and feeling of “intensity” that I want.

It’s not that the screen shake breaks. It’s the snappy movement which you don’t like (minimal as it is).

The “snap” isn’t minimal at all, it makes it all look very wonky and poorly scripted. If the camera is visibly frozen in place for 1/4 of a second, it could seriously mess up PVP and combat in general.

Try going back to the original camera CFrame before the player is dropped down

I did, it ended up with the same problem as before where the camera is frozen.

Can I have the rest of the script where you first mess with camera properties and when you reset it? I’ll get on pc in a few hours and look through it.

shakes.ChildAdded:connect(function(child)
	if child.Name == "ShakeBlock" then
		local range = child:WaitForChild("Radius")
		local intense = child:WaitForChild("Intense")
		if range then
			if (root.Position - child.Position).magnitude <= range.Value then
				if intense.Value == false then
					print("ooga booga i didn't make the less intense screenshake")
				else
					delay(0,function()
						local original = cam.CFrame
						offset(cam.CFrame * CFrame.Angles(0,-0.02,0),0.05)
						wait(0.01)
						offset(cam.CFrame * CFrame.Angles(0,0.03,0),0.05)
						wait(0.01)
						offset(cam.CFrame * CFrame.Angles(0,-0.02,0),0.06)
						wait(0.01)
						offset(cam.CFrame * CFrame.Angles(0,0.02,0),0.07)
						wait(0.01)
						offset(cam.CFrame * CFrame.Angles(0,-0.02,0),0.05)
						wait(0.01)
						offset(cam.CFrame * CFrame.Angles(0,0.01,0),0.05)
						wait(0.01)
						offset(cam.CFrame * CFrame.Angles(0,-0.005,0),0.05)
						wait(0.01)
						offset(cam.CFrame * CFrame.Angles(0,0.002,0),0.05)
						wait(0.01)
						offset(original,0.1)
					end)
				end
			end
		end
	end
end)

most of the other stuff is just triggering the camera effect

Try getting rid of the

offset(original,0.1)

at the end. I did it and it seemed to work better without the snap.

This is the code I used:

wait(2)

game.Players.LocalPlayer.Character.Humanoid.Jump = true -- I set the jump power to 70
wait(.5)
game.Players.LocalPlayer.Character.HumanoidRootPart.Anchored = true

local cam = workspace.CurrentCamera
local tweening = game:GetService("TweenService")

local function offset(rotation,duration)
	local propertieschanged = {
		CFrame = rotation
	}
	local info = TweenInfo.new(duration,Enum.EasingStyle.Linear,Enum.EasingDirection.Out,0,false,0)
	local tween = tweening:Create(cam,info,propertieschanged)
	tween:Play()
end

local original = cam.CFrame
offset(cam.CFrame * CFrame.Angles(0,-0.02,0),0.05)
wait(0.01)
offset(cam.CFrame * CFrame.Angles(0,0.03,0),0.05)
wait(0.01)
offset(cam.CFrame * CFrame.Angles(0,-0.02,0),0.06)
wait(0.01)
offset(cam.CFrame * CFrame.Angles(0,0.02,0),0.07)
wait(0.01)
offset(cam.CFrame * CFrame.Angles(0,-0.02,0),0.05)
wait(0.01)
offset(cam.CFrame * CFrame.Angles(0,0.01,0),0.05)
wait(0.01)
offset(cam.CFrame * CFrame.Angles(0,-0.005,0),0.05)
wait(0.01)
offset(cam.CFrame * CFrame.Angles(0,0.002,0),0.05)
wait(0.01)
--offset(game.Players.LocalPlayer.Character.HumanoidRootPart.CFrame,0.1)

game.Players.LocalPlayer.Character.HumanoidRootPart.Anchored = false
1 Like

It still ends up snapping the camera. I don’t anchor the character at any point, I only use a bodyposition at some point to temporarily and smoothly keep the player “hanging” from a certain position.

Afaik, this is the closest you can get without the “snap”.