I am trying to make a body cam head system, but i’m having trouble with the root part rotating too much so that it causes the whole character to spin infinitely. any help would be appreciated.
local humanoid = char:WaitForChild("Humanoid")
humanoid.AutoRotate = false
local FakeHead = Instance.new("Part", char)
FakeHead.Name = "FakeHead"
FakeHead.CanCollide = false
FakeHead.CanQuery = false
FakeHead.CanTouch = false
FakeHead.CFrame = head.CFrame
FakeHead.Transparency = 1
local weld = Instance.new("WeldConstraint", FakeHead)
weld.Part0 = upperTorso
weld.Part1 = FakeHead
runService.RenderStepped:connect(function()
CamPos = CamPos + (TargetCamPos - CamPos) *0.28
AngleX = AngleX + (TargetAngleX - AngleX) *0.35
local dist = TargetAngleY - AngleY
dist = math.abs(dist) > 180 and dist - (dist / math.abs(dist)) * 360 or dist
AngleY = (AngleY + dist *0.35) %360
cam.CameraType = Enum.CameraType.Scriptable
cam.CoordinateFrame = head.CFrame
* CFrame.Angles(0,math.rad(AngleY),0)
* CFrame.Angles(math.rad(AngleX),0,0)
* CFrame.new(CurrentOffset)
--print(head.CFrame)
local difference = head.Orientation-FakeHead.Orientation
difference = -difference
local camLv = cam.CFrame.lookVector
local camRotation = math.atan2(-camLv.X, -camLv.Z)
rootPart.CFrame = CFrame.new(rootPart.Position) * CFrame.Angles(0, camRotation, 0) * CFrame.Angles(math.rad(difference.X),math.rad(difference.Y),math.rad(difference.Z))
--[[spawn(function()
local camDirection = rootPart.CFrame:ToObjectSpace(cam.CFrame).LookVector
if neck then
neck.C0 = CFrame.new(0, neckY, 0) * CFrame.Angles(3 * math.pi/2, 0, math.pi) * CFrame.Angles(math.rad(90), 0, -math.asin(camDirection.x)) * CFrame.Angles(0, math.rad(180), 0)
end
if waist then
waist.C0 = waist.C0:Lerp((CFrame.new(0,waistY,0) * CFrame.Angles(camDirection.Y,0,0)),0.5 / 2) * waistOffset --* CFrame.Angles(0,math.rad(UserInputService:GetMouseDelta().X),0)
end
end)]]
end)