Чекпоинты — одна из самых важных механик в играх типа obby.
Они позволяют игроку сохранять прогресс и появляться после смерти не в начале карты, а на последней достигнутой точке.
В этом уроке мы создадим простую систему чекпоинтов. Когда игрок касается точки, она становится его новой точкой возрождения.
Такая система используется почти во всех obby-играх.
Видео-туториал
Видео с демонстрацией работы системы чекпоинтов:
Подготовка чекпоинтов
Сначала нужно создать точки, на которых игрок будет появляться после смерти.
1. Создаём SpawnLocation
Добавьте несколько объектов SpawnLocation на карту.
Это и будут точки сохранения.
Например:
- старт
- середина уровня
- конец уровня
2. Выделяем все SpawnLocation
В окне Explorer выделите все созданные точки.
3. Добавляем тег
Откройте Tag Editor и добавьте тег:
Checkpoint
Теперь скрипт сможет автоматически находить все чекпоинты в игре.
Это удобно, потому что вам не нужно прописывать каждый чекпоинт вручную.
Создаём серверный скрипт
Теперь нужно написать скрипт, который будет:
- отслеживать касание чекпоинта
- определять игрока
- менять точку возрождения
Шаг 1
Создайте Script в папке:
ServerScriptService
Серверный скрипт нужен потому, что RespawnLocation меняется на сервере.
Скрипт системы чекпоинтов
-- Получаем сервис для работы с тегами
local CollectionService = game:GetService("CollectionService")
-- сервис игроков
local Players = game:GetService("Players")
-- список всех объектов с тегом "Checkpoint"
local checkpoints = CollectionService:GetTagged("Checkpoint")
-- создаем функцию
local function setCheckpoint(checkpart , otherPart)
-- Проверяем, есть ли у объекта Humanoid
-- Это гарантирует, что чекпоинт активировал именно игрок
if otherPart.Parent:FindFirstChild("Humanoid") then
local character = otherPart.Parent
-- Определяем игрока
local player = Players:GetPlayerFromCharacter(character)
-- Если игрок найден — меняем точку возрождения
if player then
player.RespawnLocation = checkpart
end
end
end
-- Подключаем обработчик ко всем существующим чекпоинтам
for i , checkpoint in ipairs(checkpoints) do
checkpoint.Touched:Connect(function(otherPart)
setCheckpoint(checkpoint , otherPart)
end)
end
-- Отслеживаем появление новых чекпоинтов
CollectionService:GetInstanceAddedSignal("Checkpoint"):Connect(function(checkpoint)
checkpoint.Touched:Connect(function(otherPart)
setCheckpoint(checkpoint , otherPart)
end)
end)Как работает система чекпоинтов
Разберём принцип работы скрипта.
1. Поиск всех чекпоинтов
Скрипт использует CollectionService, чтобы найти все объекты с тегом:
Checkpoint
2. Событие касания
Когда игрок касается чекпоинта, срабатывает событие:
Touched
3. Проверка игрока
Скрипт проверяет:
FindFirstChild("Humanoid")
Это нужно, чтобы убедиться, что чекпоинт активировал именно персонаж игрока, а не предмет.
4. Определение игрока
Скрипт определяет игрока через:
Players:GetPlayerFromCharacter()
5. Изменение точки возрождения
Если игрок найден, меняется его точка появления:
player.RespawnLocation = checkpart
Теперь после смерти игрок будет появляться на последнем чекпоинте.
Почему лучше использовать теги
Использование Tag Editor и CollectionService имеет несколько преимуществ:
✔️ не нужно прописывать каждый чекпоинт
✔️ можно легко добавлять новые точки
✔️ скрипт автоматически их найдёт
✔️ код становится чище и проще
Где используются чекпоинты
Такая система применяется во многих типах игр:
- Obby игры
- платформеры
- приключенческие карты
- паркур-карты
- уровневые игры
Чекпоинты делают игру менее сложной и более удобной для игроков.
Итог
В этом уроке вы научились:
- создавать чекпоинты
- использовать SpawnLocation
- добавлять теги через Tag Editor
- отслеживать касание через Touched
- менять RespawnLocation игрока
Теперь вы можете легко добавить систему сохранения прогресса в свою obby-игру.
🔗 Полезные ссылки:
Скрипты для GUI в Роблокс Студио: таймер, здоровье, очки и деньги
🚀 Хочешь научиться делать свои игры?
Переходи на roblo.ru и запишись на обучение Роблокс Студио!
И не забудь заглянуть в наш Telegram 👉 t.me/robloppo
