hello devs!, I’m reaching out to ask for help because I’ve hit a roadblock. I’m aware of the possibility I haven’t set it up right and hoping its not a code error as it was working before I finalized it. ive tried an assortment of things and have been unsuccessful. this is what it all looks like in workspace.
here is the code im using
headmovement
local tweenService = game:GetService("TweenService")
local Camera = workspace.CurrentCamera
local Player = game.Players.LocalPlayer
local Character = Player.Character
local Root = Character:WaitForChild("HumanoidRootPart")
local Neck = Character:FindFirstChild("Neck", true)
local YOffset = Neck.C0.Y
local CFNew, CFAng = CFrame.new, CFrame.Angles
local asin = math.asin
game:GetService("RunService").RenderStepped:Connect(function()
local CameraDirection = Root.CFrame:toObjectSpace(Camera.CFrame).lookVector
if Neck then
if Character.Humanoid.RigType == Enum.HumanoidRigType.R15 then
Neck.C0 = CFNew(0, YOffset, 0) * CFAng(0, -asin(CameraDirection.x), 0) * CFAng(asin(CameraDirection.y), 0, 0)
elseif Character.Humanoid.RigType == Enum.HumanoidRigType.R6 then
Neck.C0 = CFNew(0, YOffset, 0) * CFAng(3 * math.pi/2, 0, math.pi) * CFAng(0, 0, -asin(CameraDirection.x)) * CFAng(-asin(CameraDirection.y), 0, 0)
end
end
end)
game.ReplicatedStorage.Look.OnClientEvent:Connect(function(otherPlayer, neckCFrame)
local Neck = otherPlayer.Character:FindFirstChild("Neck", true)
Neck.C0 = neckCFrame
end)
while wait(0.1) do
game.ReplicatedStorage.Look:FireServer(Neck.C0)
end
camera client
wait(0)
local InputService=game:GetService("UserInputService")
local Camera=game.Workspace.CurrentCamera
local Player=game.Players.LocalPlayer
local Character=Player.Character
local Head=Character.Head
local Torso=Character.Torso
local RootPart=Character.HumanoidRootPart
local RootJoint=RootPart.RootJoint
local Neck=Torso.Neck
if InputService.TouchEnabled then
script:Destroy()
end
Camera.FieldOfView=90
Camera.CameraType="Scriptable"
InputService.MouseBehavior=Enum.MouseBehavior.LockCenter
local v3=Vector3.new
local cf=CFrame.new
local components=cf().components
local inverse=cf().inverse
local fromAxisAngle=CFrame.fromAxisAngle
local atan,atan2=math.atan,math.atan2
local acos=math.acos
local function toAxisAngleFromVector(v)
local z=v.z
return z*z<0.99999 and v3(v.y,-v.x,0).unit*acos(-z) or v3()
end
local function AxisAngleLookOrientation(c,v,t)--CFrame,Vector,Tween
local c=c-c.p
local rv=(inverse(c)*v).unit
local rz=rv.z
return rz*rz<0.99999 and c*fromAxisAngle(v3(rv.y,-rv.x,0),acos(-rz)*(t or 1)) or c
end
local function AxisAngleLookNew(v,t)--CFrame,Vector,Tween
local rv=v.unit
local rz=rv.z
return rz*rz<0.99999 and fromAxisAngle(v3(rv.y,-rv.x,0),acos(-rz)*(t or 1)) or cf()
end
local function AxisAngleLook(c,v,t)--CFrame,Vector,Tween
local rv=(inverse(c)*v).unit
local rz=rv.z
return rz*rz<0.99999 and c*fromAxisAngle(v3(rv.y,-rv.x,0),acos(-rz)*(t or 1)) or c
end
local Sensitivity=0.005
local CameraDirection=Vector3.new(0,0,1)
local function EulerAnglesYX(l)
local x,z=l.x,l.z
return atan(l.y/(x*x+z*z)^0.5),-atan2(x,-z)
end
local function AnglesXY(l)
local z=l.z
return atan2(l.y,-z),-atan2(l.x,-z)
end
local function MouseMoved(Input)
if Input.UserInputType==Enum.UserInputType.MouseMovement then
local dx,dy=Input.Delta.x*Sensitivity,Input.Delta.y*Sensitivity
local m2=dx*dx+dy*dy
if m2>0 then
CameraDirection=(AxisAngleLookOrientation(RootPart.CFrame,CameraDirection)*fromAxisAngle(v3(-dy,-dx,0),m2^0.5)).lookVector
end
local RootOrientation=RootPart.CFrame-RootPart.Position
local RelativeDirection=RootOrientation:inverse()*CameraDirection
local AngX,AngY=AnglesXY(RelativeDirection)--RootOrientation:inverse()*
if AngX<-1.57*11/12 then
local y,z,c,s=RelativeDirection.y,RelativeDirection.z,math.cos(-1.57*11/12-AngX),-math.sin(-1.57*11/12-AngX)
z,y=z*c-y*s,z*s+y*c
CameraDirection=RootOrientation*v3(RelativeDirection.x<0 and -(1-y*y-z*z)^0.5 or (1-y*y-z*z)^0.5,y,z)
elseif AngX>1.57*11/12 then
local y,z,c,s=RelativeDirection.y,RelativeDirection.z,math.cos(1.57*11/12-AngX),-math.sin(1.57*11/12-AngX)
z,y=z*c-y*s,z*s+y*c
CameraDirection=RootOrientation*v3(RelativeDirection.x<0 and -(1-y*y-z*z)^0.5 or (1-y*y-z*z)^0.5,y,z)
end
end
end
local Mouse=Player:GetMouse()
local Zoom=-0.5
InputService.InputChanged:connect(MouseMoved)
Neck.C1=cf()
local _
local DirectionBound=3.14159/3
local CurrentAngY=0
local function CameraUpdate()
Camera.CameraType="Scriptable"
local cx,cz=CameraDirection.x,CameraDirection.z
local rvx,rvz=RootPart.Velocity.x,RootPart.Velocity.z
if rvx*rvx+rvz*rvz>4 and cx*rvx+cz*rvz<-0.5*(cx*cx+cz*cz)^0.5*(rvx*rvx+rvz*rvz)^0.5 then
DirectionBound=math.min(DirectionBound*0.9,math.abs(CurrentAngY*0.9))
else
DirectionBound=DirectionBound*0.1+3.14159/3*0.9
end
local AngX,AngY=EulerAnglesYX((RootPart.CFrame-RootPart.Position):inverse()*CameraDirection)
if AngY>DirectionBound then
RootPart.CFrame=RootPart.CFrame*CFrame.Angles(0,AngY-DirectionBound,0)
elseif AngY<-DirectionBound then
RootPart.CFrame=RootPart.CFrame*CFrame.Angles(0,AngY+DirectionBound,0)
end
_,CurrentAngY=EulerAnglesYX((RootPart.CFrame-RootPart.Position):inverse()*CameraDirection)
local CameraOrientation=AxisAngleLookNew((RootPart.CFrame-RootPart.Position):inverse()*CameraDirection,1)
Neck.C0=CFrame.new(0,1,0)*CameraOrientation*CFrame.new(0,0.5,0)
local PreCam=AxisAngleLook(RootPart.CFrame*cf(0,1,0),RootPart.CFrame*v3(0,1,0)+CameraDirection)*CFrame.new(0,0.825,0)
if Zoom==8 then
local Part,Position=workspace:findPartOnRay(Ray.new(PreCam.p,PreCam.lookVector*-8),Character)
Camera.CoordinateFrame=PreCam*CFrame.new(0,0,(Position-PreCam.p).magnitude)
else
Camera.CoordinateFrame=PreCam*CFrame.new(0,0,Zoom)
end
end
game:GetService("RunService").RenderStepped:connect(CameraUpdate)
this is the error i get when i run the game
10:54:00.645 Head is not a valid member of Workspace “Workspace” - Server - CameraServer:7