Roblox · Дополнительное

Телепорт туда-обратно

Две светящиеся площадки. Встал на одну — оказался над другой. Чтобы не перебрасывало туда-сюда без конца, после прибытия телепорт 2 секунды не срабатывает для этого персонажа.

Структура

Синим — что нужно создать.

Workspace
└─ Teleporter (Model)
   ├─ PadA (Part) — Anchored, Material Neon
   ├─ PadB (Part) — Anchored, Material Neon — в другом месте карты
   └─ TeleportServer (Script)

Шаги

  1. Workspace → «+» → Model, переименуй в Teleporter.
  2. В Teleporter: «+» → Part, переименуй в PadA. Size — 5, 0.4, 5; Anchored — вкл.; Material — Neon; яркий цвет.
  3. Скопируй PadA (Ctrl+D), переименуй копию в PadB и переставь её в другое место карты — хоть на гору, хоть в здание.
  4. В Teleporter: «+» → Script, переименуй в TeleportServer, вставь текст TeleportServer из «Скриптов».
  5. Как работает: PivotTo переносит всю модель персонажа целиком на 4 studs над второй площадкой; атрибут TeleportedAt запоминает время, чтобы сразу не отправить назад.
  6. Нужен телепорт только в одну сторону — удали строку Link(padB, padA).
  7. Несколько пар телепортов — копируй модель Teleporter целиком: у каждой пары свой скрипт.

Скрипты

TeleportServer

Где: Workspace → Teleporter · Script
Зачем: Переносит персонажа с одной площадки на другую и обратно.

-- модель с двумя площадками
local teleporter = script.Parent
-- первая площадка
local padA = teleporter:WaitForChild("PadA")
-- вторая площадка
local padB = teleporter:WaitForChild("PadB")
-- секунд, пока телепорт не сработает снова для того же персонажа
local COOLDOWN = 2

-- встал на from — окажешься на to
local function Link(from, to)
    -- на площадку что-то наступило
    from.Touched:Connect(function(otherPart)
        -- модель, которой принадлежит деталь
        local model = otherPart:FindFirstAncestorOfClass("Model")
        -- живая?
        local humanoid = model and model:FindFirstChildOfClass("Humanoid")
        -- не живая — пропускаем
        if not humanoid or humanoid.Health <= 0 then return end
        -- когда этот персонаж телепортировался в прошлый раз
        local last = model:GetAttribute("TeleportedAt") or 0
        -- только что прибыл — обратно не отправляем
        if os.clock() - last < COOLDOWN then return end
        -- запоминаем время
        model:SetAttribute("TeleportedAt", os.clock())
        -- переносим весь персонаж на 4 studs выше второй площадки
        model:PivotTo(to.CFrame + Vector3.new(0, 4, 0))
    -- конец обработчика
    end)
-- конец функции
end

-- A → B
Link(padA, padB)
-- B → A
Link(padB, padA)

Проверка

Запусти Play (или Run) и убедись:

Собрать телепорт одной командой