-- FirstPersonCamera (LocalScript)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local player = Players.LocalPlayer
local camera = workspace.CurrentCamera
-- Ждём появления персонажа
local character = player.Character or player.CharacterAdded:Wait()
local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
local head = character:WaitForChild("Head")
-- Скрываем все части тела чтобы не видеть себя изнутри
local function hideCharacter()
for _, part in ipairs(character:GetDescendants()) do
if part:IsA("BasePart") or part:IsA("Decal") then
part.LocalTransparencyModifier = 1
end
end
end
character.DescendantAdded:Connect(function(part)
if part:IsA("BasePart") or part:IsA("Decal") then
part.LocalTransparencyModifier = 1
end
end)
hideCharacter()
-- Захват мыши
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
-- Параметры камеры
local rotX = 0 -- вертикаль (pitch)
local rotY = 0 -- горизонталь (yaw)
local sensitivity = 0.003
local maxPitch = math.rad(80)
camera.CameraType = Enum.CameraType.Scriptable
RunService.RenderStepped:Connect(function()
if not character or not character.Parent then return end
-- Читаем движение мыши
local delta = UserInputService:GetMouseDelta()
rotY = rotY - delta.X * sensitivity
rotX = rotX - delta.Y * sensitivity
rotX = math.clamp(rotX, -maxPitch, maxPitch)
-- Позиция камеры = глаза персонажа
local eyePosition = head.Position + Vector3.new(0, 0.2, 0)
-- Строим CFrame камеры
local cameraCFrame = CFrame.new(eyePosition)
* CFrame.Angles(0, rotY, 0)
* CFrame.Angles(rotX, 0, 0)
camera.CFrame = cameraCFrame
-- Поворачиваем тело персонажа вслед за горизонтальным взглядом
humanoidRootPart.CFrame = CFrame.new(humanoidRootPart.Position)
* CFrame.Angles(0, rotY, 0)
end)