Roblox · Гонки · урок 5
Стартовое место игры: камера плавно облетает красивую сцену по кругу, а на экране — меню с трассами. Нажал на трассу — переносишься на неё.
Синим — что добавляем на этом уроке.
Workspace ├─ Cutscenes (Folder) — создаёт плагин Cutscene │ └─ Cutscene (Folder) │ └─ Cameras (Folder) │ └─ 1, 2, 3, … (Part) — точки камеры — по порядку └─ SpawnLocation (SpawnLocation) — под картой — персонажа не видно в кадре StarterPlayer └─ StarterPlayerScripts └─ CameraAnimation (LocalScript) StarterGui └─ ChooseMapGui (ScreenGui) └─ Frame (Frame) ├─ TextLabel (TextLabel) — «Выбери трассу» └─ Track1, Track2, … (ImageButton) — по кнопке на трассу └─ TeleportScript (LocalScript)
Где: StarterPlayer → StarterPlayerScripts · LocalScript
Зачем: Плавно облетает все точки камеры по кругу.
-- плавное движение камеры
local TS = game:GetService("TweenService")
-- точки-камеры от плагина: 1, 2, 3…
local cameraFolder = workspace:WaitForChild("Cutscenes"):WaitForChild("Cutscene"):WaitForChild("Cameras")
-- камера игрока
local camera = workspace.CurrentCamera
-- секунд от одной точки до следующей
local FLY_TIME = 5
-- перелёт камеры между двумя точками
local function Fly(fromPart, toPart)
-- мягкий разгон и торможение
local tweenInfo = TweenInfo.new(FLY_TIME, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut)
-- камерой управляет скрипт, а не мышь
camera.CameraType = Enum.CameraType.Scriptable
-- встаём в первую точку
camera.CFrame = fromPart.CFrame
-- движение ко второй
local tween = TS:Create(camera, tweenInfo, {CFrame = toPart.CFrame})
-- летим
tween:Play()
-- ждём, пока долетит
tween.Completed:Wait()
-- конец функции
end
-- кадр: камера игрока успевает появиться
task.wait()
-- сколько точек расставил плагин
local count = #cameraFolder:GetChildren()
-- по кругу без конца
while true do
-- каждая точка
for i = 1, count do
-- следующая; после последней — снова первая
local nextIndex = i % count + 1
-- летим от точки i к следующей
Fly(cameraFolder[tostring(i)], cameraFolder[tostring(nextIndex)])
-- конец перебора
end
-- конец цикла
endГде: StarterGui → ChooseMapGui → Frame → Track1 · LocalScript
Зачем: По нажатию переносит игрока на плейс с трассой.
-- ID плейса с трассой — вставь свой из Asset Manager
local PLACE_ID = 0
-- кнопка трассы
local button = script.Parent
-- перенос между плейсами
local TeleportService = game:GetService("TeleportService")
-- игрок, который нажал
local player = game.Players.LocalPlayer
-- нажали на кнопку
button.MouseButton1Click:Connect(function()
-- прячем меню
button.Parent.Visible = false
-- переносим на трассу
TeleportService:Teleport(PLACE_ID, player)
-- конец обработчика
end)Запусти Play (или Run) и убедись: