I made a third person shooter styled camera script and I am trying to also get a camera bobble effect to work along with it, but when I use the scripted third person camera with the camera bobble effect it does not work. If I use only the camera bobble effect with the normal non scripted camera it does work. I need some help on how to have it work with the scripted third person camera.
Note: I have also tried to seperate both the camera bobble and third person camera into two scripts rather than one and it still did not work.
Here is the code for the third person camera:
-- Services
local uis = game:GetService("UserInputService")
local rs = game:GetService("RunService")
local context = game:GetService("ContextActionService")
-- Player + Char
local plr = game:GetService("Players").LocalPlayer
-- Other
local Camera = game:GetService("Workspace").CurrentCamera
local mouse = plr:GetMouse()
local cameraDB = false
local zoomDB = false
-- Angles
local xAngle = 0
local yAngle = 0
local cameraPos = Vector3.new(2,0,8.5)
-- CAMERA SETTING --
wait(0.01)
Camera.CameraType = Enum.CameraType.Scriptable
-- FUNCTIONS --
context:BindAction("CameraMovement", function(_,_,input)
xAngle = xAngle - input.Delta.x*0.4
yAngle = math.clamp(yAngle - input.Delta.y*0.4,-80,80)
end, false, Enum.UserInputType.MouseMovement)
rs.RenderStepped:Connect(function()
local c = plr.Character or plr.CharacterAdded:Wait()
local rootPart = c:FindFirstChild("HumanoidRootPart")
if c and rootPart then
local startCFrame = CFrame.new((rootPart.CFrame.p + Vector3.new(0,2,0)))*CFrame.Angles(0, math.rad(xAngle), 0)*CFrame.Angles(math.rad(yAngle), 0, 0)
local cameraCFrame = startCFrame + startCFrame:VectorToWorldSpace(Vector3.new(cameraPos.X,cameraPos.Y,cameraPos.Z))
local cameraFocus = startCFrame + startCFrame:VectorToWorldSpace(Vector3.new(cameraPos.X,cameraPos.Y,-50000))
Camera.CFrame = CFrame.new(cameraCFrame.p,cameraFocus.p)
end
end)
Here is the code for the bobble effect:
--Bobble
local char = script.Parent
local humanoid = char:WaitForChild('Humanoid')
function Effect()
local time = tick()
if humanoid.MoveDirection.Magnitude > 0 then
local X = math.cos(time*10)*0.35
local Y = math.abs(math.sin(time*10))*0.35
local shake = Vector3.new(X,Y,0)
humanoid.CameraOffset = humanoid.CameraOffset:lerp(shake,0.25)
else
humanoid.CameraOffset = humanoid.CameraOffset*0.75
end
end
rs.RenderStepped:connect(Effect)
This script is placed in StarterPlayerScripts.
This is also in one script, let me know if I should split it into two different scripts if it functions better.
