берешь и анимируешь камеру просто
в скрипте приведены два вида катсцены - линейное движение камеры (вдоль линии) и вращение вокруг цели на заданном радиусе
остальные катсцены можно скомбинировать из таких фрагментов
local runSvc = game:GetService('RunService')
local cam = workspace.CurrentCamera
local t_start, t_total = nil, nil
local flag_cscene_type = nil
local cpoint_list = workspace:WaitForChild('dummies'):WaitForChild('cam_waypoints'):GetChildren()
local orbit_target = workspace:WaitForChild('dummies'):WaitForChild('spawn.srf')
local trg01 = workspace:WaitForChild('dummies'):WaitForChild('cscene_trg01')
local trg02 = workspace:WaitForChild('dummies'):WaitForChild('cscene_trg02')
trg01.Touched:Connect(function(hit)
flag_cscene_type = 'dolly'
run()
end)
trg02.Touched:Connect(function(hit)
flag_cscene_type = 'orbit'
run()
end)
function updatecam()
if flag_cscene_type == 'dolly' then
dolly_line(
cpoint_list[1].WorldCFrame,
cpoint_list[2].WorldCFrame,
t_total
)
elseif flag_cscene_type == 'orbit' then
orbit(
orbit_target,
t_total
)
end
end
local CAM_DOLLYSPEED = 64.0
function dolly_line(start, finish, t_total)
local dist = (finish.Position - start.Position).Magnitude
local dur = dist / CAM_DOLLYSPEED
local elapsed = t_total - t_start
local ratio = elapsed / dur
cam.CFrame = start:Lerp(finish, ratio)
if ratio > 0.999 then
reset()
end
end
local CAM_ROTSPEED = 15
local CAM_R = 80
local CAM_ELEV = 15
function orbit(target, t_total)
local dur = 360 / CAM_ROTSPEED
local ratio = (t_total - t_start) / dur
cam.CFrame = CFrame.lookAt((target:GetPivot() + Vector3.new(math.sin(math.rad(CAM_ROTSPEED) * t_total) * CAM_R, CAM_ELEV, math.cos(math.rad(CAM_ROTSPEED) * t_total) * CAM_R)).Position, target:GetPivot().Position)
if ratio > 0.999 then
reset()
end
end
local conn = nil
function run()
t_start, t_total = 0, 0
conn = runSvc.Heartbeat:Connect(function(delta)
t_total += delta
updatecam()
end)
cam.CameraType = Enum.CameraType.Scriptable
end
function reset()
conn:Disconnect()
cam.CameraType = Enum.CameraType.Custom
flag_cscene_type = nil
end

(падение рандомных фигур сверху сделано чисто для примера, как замена каким то происходящим в игре событиям)
использую плагин cutscene editor plugin. Мне надо чтобы когда тип наступает на part воспроизводилась катсцена, смотрел кучу роликов и делал все точно также, но не работает. помогите