Обби своими руками: чекпоинты, killbrick и движущиеся платформы
Как сделать полосу препятствий, в которой игрок возрождается на последнем пройденном этапе, а не в начале. Разбираем чекпоинты через команды, killbrick без лишних скриптов и платформы, которые ездят сами.
Средне 25 минут 6 шагов проверен 4 часа назад
Что понадобится
Roblox Studio, умение поставить деталь и включить Anchored. Пара коротких скриптов — весь код в гайде.
Текст гайда «Обби своими руками: чекпоинты, killbrick и движущиеся платформы»
Содержание
Обби делают все, и почти у всех она получается недоделанной в одном месте: игрок падает на сороковом этапе и оказывается в самом начале. После второго такого падения он закрывает игру. Чекпоинт — это не украшение, это единственное, что удерживает человека в сложной обби.
Как Roblox вообще решает, где возродить игрока#
За точку появления отвечает объект SpawnLocation. Если их несколько, движок выбирает не «ближайший» и не «последний», а тот, чей TeamColor совпадает с командой игрока. На этом и строятся чекпоинты: каждый этап — своя команда, наступил на площадку — перевели в её команду.
Три галочки, без которых ничего не работает
У каждого SpawnLocation: Neutral выключен (иначе цвет команды игнорируется), AllowTeamChangeOnTouch выключен (иначе игрок перекинется в команду, просто пробежав назад), Enabled включён. Первый спавн — исключение: он должен быть доступен всем, кто только зашёл.
Команды под этапы#
В Explorer добавь сервис Teams, внутри него создай по объекту Team на каждый чекпоинт. У каждой команды свой TeamColor — цвета не должны повторяться, иначе движок перепутает площадки. У всех команд, кроме стартовой, снимай AutoAssignable: новичок должен попадать на первый этап, а не в случайный.
local checkpoint = script.Parent
local teams = game:GetService("Teams")
local players = game:GetService("Players")
-- Команда берётся по цвету самой площадки: одна деталь — одна настройка,
-- и в скрипте нечего править при копировании этапа.
checkpoint.Touched:Connect(function(hit)
local character = hit.Parent
local player = players:GetPlayerFromCharacter(character)
if not player then
return
end
for _, team in ipairs(teams:GetTeams()) do
if team.TeamColor == checkpoint.TeamColor then
player.Team = team
break
end
end
end)Копируй этап целиком
Собери один готовый чекпоинт (площадка + скрипт), сгруппируй в модель и дальше просто дублируй её на каждый этап, меняя только TeamColor. Скрипт трогать не придётся ни разу — он читает цвет у своей же детали.
Killbrick: деталь, которая убивает#
Лава, шипы, красная зона — всё это одна и та же идея: коснулся детали, потерял здоровье. Смысл в том, чтобы забирать здоровье через Humanoid, а не удалять персонажа: иначе не сработают ни анимация смерти, ни возрождение на чекпоинте.
local brick = script.Parent
brick.Touched:Connect(function(hit)
local humanoid = hit.Parent:FindFirstChildOfClass("Humanoid")
if humanoid then
humanoid.Health = 0
end
end)- ловушка должна быть видна: красный цвет, светящийся материал, звук — игрок обязан понимать, что его убило
- не ставь killbrick вплотную к чекпоинту: возрождение прямо в ловушке — самая злая ошибка в обби
- если ловушка не должна мешать проходу, сними
CanCollide, но оставьCanTouch - слишком узкий проход рядом с лавой на телефоне непроходим: проверь управление пальцем, а не только клавиатурой
Движущиеся платформы#
Платформу, которая ездит туда-сюда, делают через TweenService. Он двигает свойство плавно и сам считает промежуточные кадры — не нужно ни цикла на каждый шаг, ни ручной физики. Деталь при этом остаётся Anchored: иначе она уедет вниз вместе с игроком.
local tweenService = game:GetService("TweenService")
local platform = script.Parent
local distance = Vector3.new(0, 0, 24)
local info = TweenInfo.new(
3, -- секунд в одну сторону
Enum.EasingStyle.Sine,
Enum.EasingDirection.InOut,
-1, -- повторять бесконечно
true -- и ехать обратно
)
tweenService:Create(platform, info, {
CFrame = platform.CFrame + distance,
}):Play()Игрок соскальзывает с платформы
Персонаж не «прилипает» к движущейся детали сам. Если платформа едет быстро, игрок будет соскальзывать — это нормальное поведение движка, а не поломка. Лечится скоростью помедленнее, платформой пошире и материалом с большим трением. Не воюй с физикой, подгони дизайн.
Сложность: где обби ломается по-настоящему#
Технически обби делается за вечер. Сложно другое — сделать её проходимой. Несколько правил, которые видно только на живых игроках:
- первые три этапа должны проходиться без единой смерти — иначе человек уйдёт, не поняв, что игра ему нравится
- сложность растёт ступенями, а не непрерывно: после тяжёлого участка дай передышку
- один этап — одна новая идея; прыжок через лаву и исчезающие плиты одновременно читаются как несправедливость
- ставь чекпоинт после каждого сложного места, а не через каждые пять этапов
- пройди свою обби с телефона: половина игроков Roblox играет пальцами, и точный прыжок пальцем — совсем другое дело
Проверь чужими руками
Попроси друга пройти обби, не подсказывая. Место, где он застрял и начал злиться, — это не «он не умеет». Это твой сломанный этап. Автор всегда проходит свою карту лучше всех: он знает, куда прыгать.
Пошагово
6 шагов-
1
Сделай стартовый спавн
Поставь
SpawnLocationв начале трассы, включиAnchored. Это единственная площадка, у которойNeutralостаётся включённым. -
2
Заведи команды
Добавь сервис
Teamsи создайTeamна каждый этап. РазныеTeamColor,AutoAssignableвыключен у всех, кроме стартовой.Называй команды по номеру этапа — потом проще искать.
-
3
Собери чекпоинт
Поставь
SpawnLocationв конце первого этапа, задай ему цвет второй команды, выключиNeutralиAllowTeamChangeOnTouch, вложи внутрь скрипт из гайда. -
4
Размножь этапы
Сгруппируй чекпоинт в модель и дублируй на каждый следующий этап, меняя только
TeamColor. Скрипт править не нужно. -
5
Добавь ловушки
Поставь killbrick там, где ошибка должна стоить жизни: лава под прыжком, шипы в проходе. Сделай их заметными и не ставь рядом с чекпоинтом.
Материал Neon и красный цвет читаются как «не трогай» без единого слова.
-
6
Пройди целиком
Запусти игру и пройди обби от начала до конца, а потом ещё раз — с телефона через Roblox на устройстве. Каждое место, где ты сам не понял, куда прыгать, переделай.
Обсуждение
Пиши по делу и без личных данных. Ссылки на сторонние сайты, обмен и «бесплатные робуксы» мы скрываем — почему.
Комментарии пишут те, кто вошёл — так спокойнее всем.
ВойтиПока никто ничего не написал. Будь первым.