local RunService = game:GetService("RunService")
local player = game.Players.LocalPlayer
local camera = workspace.CurrentCamera
-- НАСТРОЙКИ
local SMOOTHNESS = 0.12 -- Чем меньше, тем сильнее задержка (0.05 - очень плавно, 0.2 - быстро)
local OFFSET = Vector3.new(0, 2, 10) -- Стандартное смещение (отдаление)
camera.CameraType = Enum.CameraType.Scriptable
local function getTargetCFrame()
local char = player.Character
if not char or not char:FindFirstChild("HumanoidRootPart") then return nil end
local root = char.HumanoidRootPart
-- Берем позицию игрока, но сохраняем вращение камеры из стандартного ввода
local targetPos = root.Position + Vector3.new(0, 2, 0) -- Высота головы
-- Мы используем текущее вращение камеры, чтобы игрок мог крутить мышкой
local rotation = camera.CFrame - camera.CFrame.Position
return CFrame.new(targetPos) * rotation * CFrame.new(0, 0, 10)
end
-- Если хочешь оставить стандартный зум и управление, используй этот метод:
RunService.RenderStepped:Connect(function()
local char = player.Character
if char and char:FindFirstChild("HumanoidRootPart") then
-- Камера будет плавно "плыть" к позиции игрока
-- Но мы меняем только позицию, чтобы не ломать вращение мышью
local root = char.HumanoidRootPart
local goalCF = camera.CFrame
-- Это магия: мы заставляем камеру чуть-чуть не успевать за игроком
camera.Focus = root.CFrame
end
end)
-- ВАЖНО: Самый простой рабочий костыль без смены типа камеры:
-- Просто добавь это в LocalScript:
camera:GetPropertyChangedSignal("CFrame"):Connect(function()
-- Этот метод сложен тем, что Roblox обновляет камеру каждый кадр жестко.
end)