많은 장소가 있는 환상 세계와 같은 많은 독특한 장소를 사용하여 사용자가 유니버스의 장소 간에 텔레포트할 수 있도록 TeleportService 를 사용하여 사용자를 텔레포트하세요.
텔레포트 설정
경험에서 순간이동을 활성화하려면 TeleportService:TeleportAsync() 메서드를 사용하십시오. 메서드는 세 가지 매개 변수를 수락합니다.
- 사용자가 순간이동할 수 있는 PlaceId입니다.
- 사용자를 순간이동하려는 Player 인스턴스를 담는 배열.
- Class.TeleportService:TeleportAsync()|TeleportAsync() 호출에 대한 사용자 정의 속성을 포함하는 옵션적인 TeleportAsync() 인스턴스.
local Players = game:GetService("Players")local TeleportService = game:GetService("TeleportService")local TARGET_PLACE_ID = 1234 -- 자신의 장소 ID로 대체local playerToTeleport = Players:GetPlayers()[1] -- 경험의 첫 번째 사용자를 얻으십시오TeleportService:TeleportAsync(TARGET_PLACE_ID, {playerToTeleport}, teleportOptions)
순간 이동을 설정할 때 오류를 처리하는 방법에 대한 자세한 내용은 순간 이동 실패 처리를 참조하십시오.
교차 경험 순간이동 활성화
보안 목적으로 사용자를 경험에서 다른 경험으로 텔레포트하거나 다른 방향으로 텔레포트하면 기본적으로 실패합니다. 사용자 경험 텔레포트를 활성화하려면 게임 설정 > 보안 > 허용 타사 텔레포트를 개방하고 Studio에서 2>허용 타사
사용자 정의 순간 이동 화면 생성
사용자가 텔레포트를 트리거하면 새로운 장소가 로드될 때까지 기다리는 동안 표준 Roblox 로딩 화면을 볼
local TeleportService = game:GetService("TeleportService")local ReplicatedStorage = game:GetService("ReplicatedStorage")local teleportGui = ReplicatedStorage.TeleportGuiTeleportService:SetTeleportGui(teleportGui)
텔레포트 옵션 사용자 정의
사용자를 특정 서버로 순간이동하거나 사용자 데이터와 함께 순간이동 보내기 등의 순간이동 사용자를 사용자 정의할 수 있습니다. Class.TeleportOptions 인스턴스를 설정하고 TeleportOptions 메서드에 전송하여 사용자 데이터를 순간이동합니다.
특정 서버로 순간이동
사용자를 특정 서버로 순간이동하려면 TeleportOptions 를 사용하여 대상 서버를 설정하고 TeleportService:TeleportAsync() 메서드에 패스합니다. 목록의 첫 번째 사용자를 순간이동하려면 Class.TeleportInfo 를 사용합니다.
사용자를 특정 공용 서버로 텔레포트하려면 TeleportOptions.ServerInstanceId 속성을 유효한 인스턴스 ID로 설정하여 공용 서버의 고유한 식별자입니다.
local teleportOptions = Instance.new("TeleportOptions")teleportOptions.ServerInstanceId = targetServerId
사용자를 특정 예약된 서버로 순간이동하려면 TeleportOptions.ReservedServerAccessCode 유효한 코드를 설정하십시오, 이는 예약된 서버에 입장하는 고유한 코드입니다.
local teleportOptions = Instance.new("TeleportOptions")teleportOptions.ReservedServerAccessCode = reservedServerCode
사용자를 새로운 예약 서버로 순간이동하려면 TeleportOptions.ShouldReserveServer를 트루로 설정합니다.
local teleportOptions = Instance.new("TeleportOptions")teleportOptions.ShouldReserveServer = true
텔레포트와 함께 사용자 데이터 전송
사용자를 장소 사이에 순간이동하면 해당 사용자와 관련된 모든 로컬 데이터가 삭제됩니다. 다음 방법을 사용하여 데이터 지속 관리를 장소 간에 처리할 수 있습니다.
경험에서 인-경험 통화 또는 인벤토리와 같은 안전한 사용자 데이터를 사용하는 경우 데이터 저장소 또는 메모리 저장소를 구현하여 데이터를 장소에서 플레이스유지합니다.
장소에서 기본 안전하지 않은 데이터 를 보내려면 TeleportOptions:SetTeleportData() 를 호출하고 TeleportAsync() 에 전달하기 전에 전송하십시오.
local teleportData = {randomNumber = RNG:NextInteger(1, 100),}local teleportOptions = Instance.new("TeleportOptions")teleportOptions:SetTeleportData(teleportData)
사용자가 서버에서 순간이동한 모든 데이터를 가져오려면 Player:GetJoinData() 함수를 사용하십시오, 이 함수는 사용자와 관련된 데이터를 포함하는 사전을 반환합니다.
local Players = game:GetService("Players")
local function onPlayerAdded(player)
local joinData = player:GetJoinData()
local teleportData = joinData.TeleportData
local randomNumber = teleportData.randomNumber
print(player.Name .. "joined with the number" .. randomNumber)
end
Players.PlayerAdded:Connect(onPlayerAdded)
클라이언트에서 전용 텔레포트 데이터만 검색하려면 TeleportService:GetLocalPlayerTeleportData()를 사용할 수 있습니다.
실패한 텔레포트 처리
네트워크 요청이 포함된 모든 API 호출에 대해 텔레포트는 실패하고 오류를 발생시킬 수 있습니다. 호출이 성공하고 텔레포트가 시작되더라도 오류를 던져서 사용자를 서버에 남겨 두면 마지막 순간에 실패하여 오류를 없애고 사용자를 서버에 남겨 둘 수 있습니다
Wrap 은 보호된 호출(pcall() )으로 텔레포트를 감싼 다음 시도하고 실패하면 다시 시도하십시오. 다음 예시 ModuleScript 는 SafeTeleport 함수를 정의하여
local TeleportService = game:GetService("TeleportService")
local ATTEMPT_LIMIT = 5
local RETRY_DELAY = 1
local FLOOD_DELAY = 15
local function SafeTeleport(placeId, players, options)
local attemptIndex = 0
local success, result -- 결과를 나중에 보고할 수 있도록 루프 외부에 pcall 결과를 정의하십시오.
repeat
success, result = pcall(function()
return TeleportService:TeleportAsync(placeId, players, options) -- 사용자를 보호된 호출로 이동하여 오류를 방지하십시오.
end)
attemptIndex += 1
if not success then
task.wait(RETRY_DELAY)
end
until success or attemptIndex == ATTEMPT_LIMIT -- 호출이 성공했거나 재시도 한도에 도달했으면 텔레포트를 중지하십시오
if not success then
warn(result) -- 출력에 실패 이유 인쇄
end
return success, result
end
local function handleFailedTeleport(player, teleportResult, errorMessage, targetPlaceId, teleportOptions)
if teleportResult == Enum.TeleportResult.Flooded then
task.wait(FLOOD_DELAY)
elseif teleportResult == Enum.TeleportResult.Failure then
task.wait(RETRY_DELAY)
else
-- teleport가 유효하지 않은대신 오류를 보고하고 다시 시도하지 않습니다.
error(("Invalid teleport [%s]: %s"):format(teleportResult.Name, errorMessage))
end
SafeTeleport(targetPlaceId, {player}, teleportOptions)
end
TeleportService.TeleportInitFailed:Connect(handleFailedTeleport)
return SafeTeleport
Class.TeleportService:TeleportAsync()|TeleportAsync() 함수는 같은 인수를 가지고 있습니다 TeleportAsync() 함수는 ModuleScript 함수와 동일한 인수를 가지고 있습니다. 다음 1>Class.ModuleScript1> 를 사용하여 경험의 어느 곳에서든 순간이동
local Players = game:GetService("Players")local ServerScriptService = game:GetService("ServerScriptService")local SafeTeleport = require(ServerScriptService.SafeTeleport)local TARGET_PLACE_ID = 1818 -- 자신의 장소 ID로 대체local playerToTeleport = Players:GetPlayers()[1] -- 게임에서 첫 번째 사용자를 가져옵니다.SafeTeleport(TARGET_PLACE_ID, {playerToTeleport}, teleportOptions)