Сборки

Обби своими руками: чекпоинты, killbrick и движущиеся платформы

Как сделать полосу препятствий, в которой игрок возрождается на последнем пройденном этапе, а не в начале. Разбираем чекпоинты через команды, killbrick без лишних скриптов и платформы, которые ездят сами.

Средне 25 минут 6 шагов проверен 4 часа назад

Что понадобится

Roblox Studio, умение поставить деталь и включить Anchored. Пара коротких скриптов — весь код в гайде.

Текст гайда «Обби своими руками: чекпоинты, killbrick и движущиеся платформы»

Содержание

Обби делают все, и почти у всех она получается недоделанной в одном месте: игрок падает на сороковом этапе и оказывается в самом начале. После второго такого падения он закрывает игру. Чекпоинт — это не украшение, это единственное, что удерживает человека в сложной обби.

Как Roblox вообще решает, где возродить игрока#

За точку появления отвечает объект SpawnLocation. Если их несколько, движок выбирает не «ближайший» и не «последний», а тот, чей TeamColor совпадает с командой игрока. На этом и строятся чекпоинты: каждый этап — своя команда, наступил на площадку — перевели в её команду.

Три галочки, без которых ничего не работает

У каждого SpawnLocation: Neutral выключен (иначе цвет команды игнорируется), AllowTeamChangeOnTouch выключен (иначе игрок перекинется в команду, просто пробежав назад), Enabled включён. Первый спавн — исключение: он должен быть доступен всем, кто только зашёл.

Команды под этапы#

В Explorer добавь сервис Teams, внутри него создай по объекту Team на каждый чекпоинт. У каждой команды свой TeamColor — цвета не должны повторяться, иначе движок перепутает площадки. У всех команд, кроме стартовой, снимай AutoAssignable: новичок должен попадать на первый этап, а не в случайный.

Luau
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, а не удалять персонажа: иначе не сработают ни анимация смерти, ни возрождение на чекпоинте.

Luau
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: иначе она уедет вниз вместе с игроком.

Luau
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()

Игрок соскальзывает с платформы

Персонаж не «прилипает» к движущейся детали сам. Если платформа едет быстро, игрок будет соскальзывать — это нормальное поведение движка, а не поломка. Лечится скоростью помедленнее, платформой пошире и материалом с большим трением. Не воюй с физикой, подгони дизайн.

Сложность: где обби ломается по-настоящему#

Технически обби делается за вечер. Сложно другое — сделать её проходимой. Несколько правил, которые видно только на живых игроках:

  1. первые три этапа должны проходиться без единой смерти — иначе человек уйдёт, не поняв, что игра ему нравится
  2. сложность растёт ступенями, а не непрерывно: после тяжёлого участка дай передышку
  3. один этап — одна новая идея; прыжок через лаву и исчезающие плиты одновременно читаются как несправедливость
  4. ставь чекпоинт после каждого сложного места, а не через каждые пять этапов
  5. пройди свою обби с телефона: половина игроков Roblox играет пальцами, и точный прыжок пальцем — совсем другое дело

Проверь чужими руками

Попроси друга пройти обби, не подсказывая. Место, где он застрял и начал злиться, — это не «он не умеет». Это твой сломанный этап. Автор всегда проходит свою карту лучше всех: он знает, куда прыгать.

Пошагово

6 шагов
  1. 1

    Сделай стартовый спавн

    Поставь SpawnLocation в начале трассы, включи Anchored. Это единственная площадка, у которой Neutral остаётся включённым.

  2. 2

    Заведи команды

    Добавь сервис Teams и создай Team на каждый этап. Разные TeamColor, AutoAssignable выключен у всех, кроме стартовой.

    Называй команды по номеру этапа — потом проще искать.

  3. 3

    Собери чекпоинт

    Поставь SpawnLocation в конце первого этапа, задай ему цвет второй команды, выключи Neutral и AllowTeamChangeOnTouch, вложи внутрь скрипт из гайда.

  4. 4

    Размножь этапы

    Сгруппируй чекпоинт в модель и дублируй на каждый следующий этап, меняя только TeamColor. Скрипт править не нужно.

  5. 5

    Добавь ловушки

    Поставь killbrick там, где ошибка должна стоить жизни: лава под прыжком, шипы в проходе. Сделай их заметными и не ставь рядом с чекпоинтом.

    Материал Neon и красный цвет читаются как «не трогай» без единого слова.

  6. 6

    Пройди целиком

    Запусти игру и пройди обби от начала до конца, а потом ещё раз — с телефона через Roblox на устройстве. Каждое место, где ты сам не понял, куда прыгать, переделай.

Обсуждение

Пиши по делу и без личных данных. Ссылки на сторонние сайты, обмен и «бесплатные робуксы» мы скрываем — почему.

Комментарии пишут те, кто вошёл — так спокойнее всем.

Войти

Пока никто ничего не написал. Будь первым.