Roblox · 2D Раннер · урок 1
Трасса из платформ, которая уходит вдоль одной оси, и камера, которая всегда смотрит на персонажа сбоку — трёхмерная игра выглядит как двумерная.
Синим — что добавляем на этом уроке.
Workspace ├─ Map (Folder) — все платформы трассы │ └─ Platform1, Platform2, … (Part) — Anchored; одна линия вдоль оси X └─ SpawnLocation (SpawnLocation) — в начале трассы; лицом в сторону бега StarterPlayer └─ StarterPlayerScripts └─ CameraScript (LocalScript)
Где: StarterPlayer → StarterPlayerScripts · LocalScript
Зачем: Каждый кадр ставит камеру сбоку от персонажа.
-- игрок на этом компьютере
local player = game.Players.LocalPlayer
-- его камера
local camera = workspace.CurrentCamera
-- события каждого кадра
local RunService = game:GetService("RunService")
-- камера на 50 студий сбоку и чуть выше персонажа
local OFFSET = Vector3.new(0, 2, -50)
-- настроить камеру для нового персонажа
local function Setup(character)
-- центр персонажа
local hrp = character:WaitForChild("HumanoidRootPart")
-- его здоровье и движение
local humanoid = character:WaitForChild("Humanoid")
-- камерой управляет скрипт, а не мышь
camera.CameraType = Enum.CameraType.Scriptable
-- узкий угол обзора — картинка почти плоская, как в 2D
camera.FieldOfView = 40
-- каждый кадр, сразу после стандартной камеры
RunService:BindToRenderStep("CameraCFrame", Enum.RenderPriority.Camera.Value + 1, function()
-- точка, где стоит камера
local position = hrp.Position + OFFSET
-- ставим камеру и смотрим на персонажа
camera.CFrame = CFrame.lookAt(position, hrp.Position)
-- конец функции кадра
end)
-- персонаж погиб
humanoid.Died:Connect(function()
-- отключаем слежение — новый персонаж включит его снова
RunService:UnbindFromRenderStep("CameraCFrame")
-- конец обработчика
end)
-- конец функции
end
-- каждый новый персонаж
player.CharacterAdded:Connect(Setup)
-- персонаж уже успел появиться до запуска скрипта
if player.Character then Setup(player.Character) endЗапусти Play (или Run) и убедись: