How would I stop the camera from moving around and stay focused during my cutscene?
Client Script
local humanoid = player.Character:FindFirstChildOfClass("Humanoid")
local head = player.Character:FindFirstChild("Head")
if not humanoid or not head then
return
end
local FREEZE_ACTION = "freezeMovement"
ContextActionService:BindAction(FREEZE_ACTION, function()
return Enum.ContextActionResult.Sink
end, false, unpack(Enum.PlayerActions:GetEnumItems()))
--Stop camera shake
cameraShake.cameraJanitor:Cleanup()
task.wait()
camera.CameraType = Enum.CameraType.Scriptable
camera.CameraSubject = head
local changeCFrame = nil
local primary = player.Character.PrimaryPart
--Makes sure that their camera isn't weirdly positioned during cutscene
if (primary.Position.Y - jason.PrimaryPart.Position.Y) > 2 then
if primary.Position.Y > jason.PrimaryPart.Position.Y then
changeCFrame = "PlayerHigher"
else
changeCFrame = "KillerHigher"
end
end
local _connection
_connection = RunService.RenderStepped:Connect(function()
if head then
if changeCFrame == "PlayerHigher" then
camera.CFrame = head.CFrame * CFrame.new(0, -1, 0)
elseif changeCFrame == "KillerHigher" then
camera.CFrame = head.CFrame * CFrame.new(0, 1, 0)
else
camera.CFrame = head.CFrame
end
end
end)
for _, v in pairs(player.Character:GetDescendants()) do
if v:IsA("BasePart") then
v.Transparency = 1
end
end
if animation == "cutscene" then
local anim: AnimationTrack =
humanoid.Animator:LoadAnimation(game.ReplicatedStorage.Storage["Victim_Execution_Firstperson"])
anim.Priority = Enum.AnimationPriority.Core
anim.Looped = false
anim:Play()
anim.Ended:Wait()
elseif string.find(animation, "Attack") then
task.wait(tonumber(string.split(animation, "/")[2]))
end
ContextActionService:UnbindAction(FREEZE_ACTION)
--Restart camera shake
cameraShake:Init()
_connection:Disconnect()
camera.CameraSubject = nil
camera.CameraType = Enum.CameraType.Custom
Camera Script
local function idle()
idleShake:BindToRenderStep(shake.NextRenderName(), Enum.RenderPriority.Camera.Value + 1, function(pos, rot, isDone)
camCf = camera.CFrame
camera.CFrame *= CFrame.new(pos) * CFrame.Angles(rot.X, rot.Y, rot.Z)
end)
idleShake:Start()
end
function cameraShakeModule:Init()
local humanoid = player.Character:FindFirstChildOfClass("Humanoid")
cameraShakeModule.cameraJanitor:Add(
RunService.Heartbeat:Connect(function()
if not camCf then
return
end
camera.CFrame = camCf
end),
"Disconnect",
3
)
local moveShaking = false
cameraShakeModule.cameraJanitor:Add(function()
idleShake:Stop()
moveShake:Stop()
moveShaking = false
camCf = nil
end, nil, 2)
cameraShakeModule.cameraJanitor:Add(
humanoid:GetPropertyChangedSignal("MoveDirection"):Connect(function()
if player.Character.PrimaryPart.Anchored == true then
cameraShakeModule.cameraJanitor:Cleanup()
repeat
task.wait()
until player.Character.PrimaryPart.Anchored ~= true
cameraShakeModule:Init()
return
end
if humanoid.MoveDirection.Magnitude > 0 then
if moveShaking then
return
end
idleShake:Stop()
moveShaking = true
camCf = nil
moveShake:BindToRenderStep(
shake.NextRenderName(),
Enum.RenderPriority.Camera.Value + 1,
function(pos, rot, isDone)
camCf = camera.CFrame
camera.CFrame *= CFrame.new(pos) * CFrame.Angles(rot.X, rot.Y, rot.Z)
end
)
moveShake:Start()
else
moveShake:Stop()
moveShaking = false
camCf = nil
idle()
end
end),
"Disconnect",
1
)
idle()
end