Roblox · Обби · урок 6

Телепорты и публикация

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

Структура

Синим — что добавляем на этом уроке.

Workspace
├─ Teleport1 (Model)
│  ├─ Ring (UnionOperation) — рамка
│  └─ Glass (Part) — CanCollide выкл., Front — вперёд
│     └─ TeleportScript (Script)
└─ Teleport2 (Model)
   ├─ Ring (UnionOperation)
   └─ Glass (Part) — Front — куда выйти

Шаги

  1. Рамка: цилиндр (Part → Shape Cylinder) и цилиндр поменьше внутри. Меньший — Model → Negate, выдели оба → Union. Получится кольцо «Ring».
  2. В кольцо — тонкий диск «Glass»: Material Glass или Neon, Transparency 0.4, CanCollide выкл., Anchored вкл.
  3. Ring + Glass → Group (Ctrl+G) → модель «Teleport1». Копия — «Teleport2» в другом месте карты.
  4. В Glass первого портала — Script «TeleportScript». TARGET — имя портала, куда ведёт.
  5. Игрок выходит в 5 studs перед вторым порталом — по его передней грани (Front). Поверни Teleport2 лицом туда, куда игрок пойдёт дальше.
  6. Нужен обратный путь — положи такой же скрипт во второй портал с TARGET = "Teleport1". Атрибут Teleported не даёт бросать игрока туда-обратно.
  7. Публикация: File → Publish to Roblox → название, описание, жанр Obby. Потом Game Settings → Permissions → Public.
  8. Game Settings → Basic Info: иконка и картинки. На create.roblox.com можно сменить их позже.

Скрипты

TeleportScript

Где: Workspace → Teleport1 → Glass · Script
Зачем: Переносит игрока ко второму порталу.

-- стекло портала
local glass = script.Parent
-- куда ведёт: имя второго портала в Workspace
local TARGET = "Teleport2"
-- стекло второго портала
local target = workspace:WaitForChild(TARGET):WaitForChild("Glass")

-- касание
glass.Touched:Connect(function(hit)
    -- модель персонажа
    local character = hit.Parent
    -- это не персонаж — выходим
    if not character:FindFirstChildOfClass("Humanoid") then return end
    -- когда телепортировался в прошлый раз
    local last = character:GetAttribute("Teleported") or 0
    -- меньше 2 секунд назад — не бросаем обратно
    if os.clock() - last < 2 then return end
    -- запоминаем время
    character:SetAttribute("Teleported", os.clock())
    -- ставим в 5 studs перед вторым порталом
    character:PivotTo(target.CFrame + target.CFrame.LookVector * 5)
-- конец функции
end)

Проверка

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