Цель
Соединить эффект портала с проверенным серверным переносом игрока
Подготовка
Workspace → Portal (Anchored Part, размер 5×8×1, CanCollide=false), Destination (Anchored Part); Portal содержит PointLight, ParticleEmitter и Script.
Пошаговая работа
- Укрась Portal свечением и частицами; место назначения установи на открытой площадке.
- Добавь серверный Script в Portal и укажи существующий Destination.
- В Play коснись портала и убедись, что персонаж перенесён.
- Проверь, что при повторном касании нет бесконечной серии телепортов.
Пример Luau
local portal = script.Parent
local destination = workspace:WaitForChild("Destination")
local Players = game:GetService("Players")
local lastUse = {}
portal.Touched:Connect(function(hit)
local character = hit:FindFirstAncestorOfClass("Model")
if not character then return end
local player = Players:GetPlayerFromCharacter(character)
local humanoid = character:FindFirstChildOfClass("Humanoid")
if not player or not humanoid or humanoid.Health <= 0 then return end
local now = os.clock()
if now - (lastUse[player] or -100) < 3 then return end
lastUse[player] = now
character:PivotTo(destination.CFrame * CFrame.new(0, 4, 0))
end)
Players.PlayerRemoving:Connect(function(player) lastUse[player] = nil end)Проверка
Пройди портал, попробуй коснуться его снова сразу и через три секунды.
Игрок перемещается к Destination, а повторные касания в течение трёх секунд игнорируются.
Ошибка и ограничения
Не ставь Destination внутрь второго портала и не размещай его в препятствии. Для других миров нужен отдельный TeleportService.
Усложнение
Создай два портала с разными точками назначения и разными цветами.
Проверь пример в тестовой Roblox Studio перед публикацией. Используй отдельные копии проектов и соблюдай права на аудио и анимации.
