Help with the a custom 360 camera script (Look up and down freely)

I don’t find it helpful to me, still it doesn’t fix my problem.

1 Like

Also I meant to reply to you but I forgot to, at message 4.

1 Like

Making the camera type scriptable doesn’t break your script, it just disables most of the default camera behavior allowing you to script your own. I’m not experienced with camera manipulation but the link @CRAFTRONIX_457 sent should help you.

1 Like

I cannot find anything useful and anything that helps there.

1 Like

But is there still a way to make it work without scriptable or I can’t?

1 Like

Please refer to the post I linked above @CDDevelopment has mentioned about it already.

I did what u said, It works when I rotate. But not when I move my character. I cannot do this but what I can think of is I want to get its lookvector for head (in line 7), but if I added code at line 7 to renderstep, it will just override, glitches and cannot rotate. How can I do that?

Gyazo (also this camera is mainly for first person, char visible because I set the CameraMode to classic so you can see char.): https://gyazo.com/5bced98e872cca80b85bb926e2af901a

Code if needed:

wait(1)
local plr = game.Players.LocalPlayer
local uis = game:GetService("UserInputService")
local rs = game:GetService("RunService")
local cam = workspace.CurrentCamera
cam.CameraType = Enum.CameraType.Scriptable
cam.CFrame = plr.Character.Head.CFrame -- how do i get its lookvector? (Also for first person) and i didnt add it in renderstep because it will override the rotation  

rs.RenderStepped:Connect(function(step)
	uis.MouseBehavior = Enum.MouseBehavior.LockCenter
	local delta = uis:GetMouseDelta()
	--print(delta)
	local x = delta.X
	local y = delta.Y
	cam.CFrame = cam.CFrame * CFrame.Angles(math.rad(-y),math.rad(-x),math.rad(0))
end)```

I still need help with this script

Try creating a new variable that describes the total orientation, then apply that to the head CFrame instead of the delta

Ok I will try doing that what u said.

I cannot do that because it would just glitch the camera rotation and I cannot really move it, I still will go for getting the mouse delta.

Make your script a local script, name it “Camera” and parent it to StarterPlayerScripts.

It is a local script and it is in StarterPlayerScripts.

What is the name of the local script? Also when using scriptable, you will have to set the camera subject to the player’s character’s humanoid.

Side note:
RenderStepped fired every render frame, which will fire at a rapid pace witch explains why it appears not to go.

I don’t think it’s necessary to know the name but the name is customCameraScript

It doesn’t work when i change camera subject to the player’s character’s humanoid.

The local script has to be named “Camera” in order to work. Have no idea why this is the case, but I think you should try it.

1 Like

I renamed to “Camera” but it didn’t work sadly. But what I’m saying is it’s working but I just don’t know how to make it focuses as a first person perspective view. Maybe for third person too if u can.

Any solutions for making it focus a head for my camera script?

A custom 360 camera script will require extensive CFrame knowledge only achievable through experimentation, the developer reference API and articles. Here is an example custom camera script I modified which does a 360 camera located at the players head through the following CFrame operations:

  1. Create a new CFrame positioned at the head
local headCf = plr.Character.Head.CFrame
local headCFPosOnly = CFrame.new(headCf.Position)
cam.CFrame = headCFPosOnly
  1. Add a CFrame rotation of the previous camera rotation CFrame without the position.
local currentCamRotationOnly = cam.CFrame-cam.CFrame.Position
cam.CFrame = headCFPosOnly*currentCamRotationOnly
  1. Then rotate the current camera along it’s relative axis via the mouse delta
local addRotation = CFrame.Angles(math.rad(-y),math.rad(-x),math.rad(0))
cam.CFrame = headCFPosOnly*currentCamRotationOnly*addRotation

By doing these steps you will get a really wonky 360 Camera where you can still see accessories but it works. For the third person, you will probably need very different CFrame operations but I hope this should serve as an example of the CFrame manipulation required for a custom camera script.

Overall local script Code
wait(1)
local plr = game.Players.LocalPlayer
local uis = game:GetService("UserInputService")
local rs = game:GetService("RunService")
local cam = workspace.CurrentCamera
cam.CameraType = Enum.CameraType.Scriptable
cam.CFrame = plr.Character.Head.CFrame

rs.RenderStepped:Connect(function(step)
	uis.MouseBehavior = Enum.MouseBehavior.LockCenter
	local delta = uis:GetMouseDelta()
	--print(delta)
	local x = delta.X
	local y = delta.Y
	local addRotation = CFrame.Angles(math.rad(-y),math.rad(-x),math.rad(0))
	
	local headCf = plr.Character.Head.CFrame
	local headCFPosOnly = CFrame.new(headCf.Position)
	local currentCamRotationOnly = cam.CFrame-cam.CFrame.Position
	cam.CFrame = headCFPosOnly*currentCamRotationOnly*addRotation
end)
5 Likes

It’s fine, I can make my character’s CameraMode into LockFirstPerson.

I don’t necessary need for third person camera since but that’s also fine. Thanks anyway.