First Person camera not resetting after death

You can write your topic however you want, but you need to answer these questions:

  1. What do you want to achieve? Keep it simple and clear!
    I’m using a First Person camera local script in StarterCharacterScripts which activates after a player jumps (Its the only thing I could think of when I had to activate the script at a certain point since I am still very new to coding on lua) but the camera doesn’t get reset on death which I NEED to happen

  2. What is the issue? Include screenshots / videos if possible!
    The issue is that the camera doesn’t change to the default roblox camera on character death

  3. What solutions have you tried so far? Did you look for solutions on the Developer Hub?
    I tried to set the cameratype to Custom with a local script but that didnt seem to work

Is there any way that I could change the camera back

CanToggleMouse = {allowed = true; activationkey = Enum.KeyCode.F;}
CanViewBody = true
Sensitivity = 0.2
Smoothness = 0.05
FieldOfView = 80	
HeadOffset = CFrame.new(0,0.7,0)
----------------------------------- Settings
task.wait()
local Player = game.Players.LocalPlayer
local Humanoid = Player.Character:FindFirstChild("Humanoid")
local players = game:GetService("Players")
local player = players.LocalPlayer
local m = player:GetMouse()
m.Icon = "http://www.roblox.com/asset/?id=569021388"
Humanoid.Jumping:Connect(function(IsJumping) --Best way to do this
	if IsJumping then
		local Player = game.Players.LocalPlayer
		local Humanoid = Player.Character:FindFirstChild("Humanoid")

		repeat wait() until game:GetService("Players").LocalPlayer.Character ~= nil
		local runService = game:GetService("RunService")
		local input = game:GetService("UserInputService")
		local players = game:GetService("Players")

		local cam = game.Workspace.CurrentCamera 
		local character = player.Character or player.CharacterAdded:wait()
		local human = character.Humanoid
		local humanoidpart = character.HumanoidRootPart

		local head = character:WaitForChild("Head")
		local CamPos,TargetCamPos = cam.CoordinateFrame.p,cam.CoordinateFrame.p 
		local AngleX,TargetAngleX = 0,0
		local AngleY,TargetAngleY = 0,0

		local running = true
		local freemouse = false
		local defFOV = FieldOfView

		local w, a, s, d, lshift = false, false, false, false, false

		local easingtime = 0.1 --0~1
		local walkspeeds = {
			enabled =		  true;
			walkingspeed =		0;
			backwardsspeed =	0;
			sidewaysspeed =		0;
			diagonalspeed =		0;
			runningspeed =		0;
			runningFOV=			80;}

		local function updatechar()
			for _, v in pairs(character:GetChildren())do
				if CanViewBody then
					if v.Name == 'Head' then
						v.LocalTransparencyModifier = 1
						v.CanCollide = false
						v.face.LocalTransparencyModifier = 1
					end
				else
					if v:IsA'Part' or v:IsA'UnionOperation' or v:IsA'MeshPart' then
						v.LocalTransparencyModifier = 1
						v.CanCollide = false
					end
				end
				if v:IsA'Accessory' then
					v:FindFirstChild('Handle').LocalTransparencyModifier = 1
					v:FindFirstChild('Handle').CanCollide = false
				end
				if v:IsA'Hat' then
					v:FindFirstChild('Handle').LocalTransparencyModifier = 1
					v:FindFirstChild('Handle').CanCollide = false
				end
			end
		end

		local function lerp(a, b, t)
			return a * (1-t) + (b*t)
		end
		input.InputChanged:connect(function(inputObject)
			if inputObject.UserInputType == Enum.UserInputType.MouseMovement then
				local delta = Vector2.new(inputObject.Delta.x/Sensitivity,inputObject.Delta.y/Sensitivity) * Smoothness

				local X = TargetAngleX - delta.y 
				TargetAngleX = (X >= 80 and 80) or (X <= -80 and -80) or X 
				TargetAngleY = (TargetAngleY - delta.x) %360 
			end	
		end)

		input.InputBegan:connect(function(inputObject)
			if inputObject.UserInputType == Enum.UserInputType.Keyboard then
				if inputObject.KeyCode == CanToggleMouse.activationkey then
					if CanToggleMouse.allowed and freemouse == false then
						freemouse = true
					else
						freemouse = false
					end
				end
			end
			if inputObject.UserInputType == Enum.UserInputType.Keyboard then
				if inputObject.KeyCode == Enum.KeyCode.W then
					w = true
				end
				if inputObject.KeyCode == Enum.KeyCode.A then
					a = true
				end
				if inputObject.KeyCode == Enum.KeyCode.S then
					s = true
				end
				if inputObject.KeyCode == Enum.KeyCode.D then
					d = true
				end
			end
		end)

		input.InputEnded:connect(function(inputObject)
			if inputObject.UserInputType == Enum.UserInputType.Keyboard then
				if inputObject.KeyCode == Enum.KeyCode.W then
					w = false
				end
				if inputObject.KeyCode == Enum.KeyCode.A then
					a = false
				end
				if inputObject.KeyCode == Enum.KeyCode.S then
					s = false
				end
				if inputObject.KeyCode == Enum.KeyCode.D then
					d = false
				end
			end
		end)

		runService.RenderStepped:connect(function()
			if running then
				updatechar()
				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 = CFrame.new(head.Position) 
					* CFrame.Angles(0,math.rad(AngleY),0) 
					* CFrame.Angles(math.rad(AngleX),0,0)
					* HeadOffset
				humanoidpart.CFrame=CFrame.new(humanoidpart.Position)*CFrame.Angles(0,math.rad(AngleY),0)
			else game:GetService("UserInputService").MouseBehavior = Enum.MouseBehavior.Default
			end
			if (cam.Focus.p-cam.CoordinateFrame.p).magnitude < 1 then
				running = false
			else
				running = true
				if freemouse == true then
					game:GetService("UserInputService").MouseBehavior = Enum.MouseBehavior.Default
				else
					game:GetService("UserInputService").MouseBehavior = Enum.MouseBehavior.LockCenter
				end
			end
			if not CanToggleMouse.allowed then
				freemouse = false
			end
			cam.FieldOfView = FieldOfView
			if walkspeeds.enabled then
				if w and s then return end
				if w and not lshift then
					FieldOfView = lerp(FieldOfView, defFOV,easingtime)
					human.WalkSpeed = lerp(human.WalkSpeed,walkspeeds.walkingspeed,easingtime)
				elseif w and a then
					human.WalkSpeed = lerp(human.WalkSpeed,walkspeeds.diagonalspeed,easingtime)
				elseif w and d then
					human.WalkSpeed = lerp(human.WalkSpeed,walkspeeds.diagonalspeed,easingtime)
				elseif s then
					human.WalkSpeed = lerp(human.WalkSpeed,walkspeeds.backwardsspeed,easingtime)
				elseif s and a then
					human.WalkSpeed = lerp(human.WalkSpeed,walkspeeds.backwardsspeed - (walkspeeds.diagonalspeed - walkspeeds.backwardsspeed),easingtime)
				elseif s and d then
					human.WalkSpeed = lerp(human.WalkSpeed,walkspeeds.backwardsspeed - (walkspeeds.diagonalspeed - walkspeeds.backwardsspeed),easingtime)
				elseif d then
					human.WalkSpeed = lerp(human.WalkSpeed,walkspeeds.sidewaysspeed,easingtime)
				elseif a then
					human.WalkSpeed = lerp(human.WalkSpeed,walkspeeds.sidewaysspeed,easingtime)
				end	
				if lshift and w then
					FieldOfView = lerp(FieldOfView, walkspeeds.runningFOV,easingtime)
					human.WalkSpeed = lerp(human.WalkSpeed,human.WalkSpeed + (walkspeeds.runningspeed - human.WalkSpeed),easingtime)
				end
			end
		end)
	end
end)

Setting the CameraType to Custom should be the fix though. Try setting it to custom at the beginning of the script.

local camera = workspace.CurrentCamera
camera.CameraType = Enum.CameraType.Custom
local Player = game.Players.LocalPlayer
local Humanoid = Player.Character:FindFirstChild("Humanoid")
local players = game:GetService("Players")
local player = players.LocalPlayer
local m = player:GetMouse()

It worked, the camera wasn’t 100% fixed but after setting the camera subject to humanoid it worked, thanks a lot!

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.