Se vuoi costruire un'esperienza con molti luoghi distinti, come un mondo fantasy con molte città, castelli, dungeon e una vasta foresta, puoi usare TeleportService per abilitare gli utenti a teletrasportarsi tra luoghi in un universo, server o persino in un'altra esperienza.
Configurazione della teletrasportazione
Per abilitare la teletrasportazione nella tua esperienza, usa TeleportService:TeleportAsync() . Il metodo accetta tre parametri:
- Il PlaceId per gli utenti a cui teletrasportarsi.
- Un array che contiene le istanze Player che rappresentano gli utenti per Teletrasporto.
- Un'istanza TeleportOptions opzionale che contiene proprietà personalizzate per la chiamata Class.TeleportService:TeleportAsync()|TeleportAsync() .
local Players = game:GetService("Players")local TeleportService = game:GetService("TeleportService")local TARGET_PLACE_ID = 1234 -- 置き換え con il tuo ID luogolocal playerToTeleport = Players:GetPlayers()[1] -- ottenere il primo utente nell'esperienzaTeleportService:TeleportAsync(TARGET_PLACE_ID, {playerToTeleport}, teleportOptions)
Se vuoi prendere precauzioni per gestire gli errori durante l'impostazione della teletrasportazione, vedi Gestione dei teletrasporti non riusciti .
Abilitare la teletrasportazione cross experience
Per scopi di sicurezza, il teletrasporto di un utente dalla tua esperienza in un'altra esperienza di proprietà di altri, o l'altro modo intorno, non fallisce per impostazione predefinita. Per abilitare il teletrasporto cross-experience, apri Impostazioni di gioco > Sicurezza e abilita Consenti i teletrasporti di terze parti su Studio.
Creazione di schermate di teletrasporto personalizzate
Quando un utente attiva una Teletrasporto, vede la schermata di caricamento standard di Roblox mentre aspetta che il nuovo luogo si carichi. Puoi aggiungere una schermata di teletrasporto personalizz
local TeleportService = game:GetService("TeleportService")local ReplicatedStorage = game:GetService("ReplicatedStorage")local teleportGui = ReplicatedStorage.TeleportGuiTeleportService:SetTeleportGui(teleportGui)
Personalizzare le opzioni di teletrasporto
Puoi personalizzare le teletrasportazioni, come teletrasportare gli utenti su un server specifico e inviare dati utente insieme alle teletrasportazioni , impostando l'istanza TeleportOptions e passandola al metodo 1> Class.TeleportService:TeleportAsync() .
Teletrasporto ai server specifici
Per teletrasportare gli utenti su server specifici, imposta il server di destinazione utilizzando TeleportOptions e passalo al metodo TeleportService:TeleportAsync(). Se non specifici un Server, gli utenti vengono teletrasportati in un Serverpubblico. Le informazioni del primo utente nella lista vengono utilizzate per il matchmaking al Serverpubblico.
Per teletrasportare gli utenti in un Serverpubblico specifico, imposta la proprietà TeleportOptions.ServerInstanceId come ID di istanza valido, che è un identificatore unico per un Serverpubblico.
local teleportOptions = Instance.new("TeleportOptions")teleportOptions.ServerInstanceId = targetServerId
Per teletrasportare gli utenti in un Serverriservato specifico, imposta un valido TeleportOptions.ReservedServerAccessCode , che è un codice unico per entrare in un Serverriservato.
local teleportOptions = Instance.new("TeleportOptions")teleportOptions.ReservedServerAccessCode = reservedServerCode
Per teletrasportare gli utenti in un nuovo Serverriservato, imposta TeleportOptions.ShouldReserveServer su true.
local teleportOptions = Instance.new("TeleportOptions")teleportOptions.ShouldReserveServer = true
Invio di dati utente insieme ai teletrasporti
Il teletrasporto di un utente tra i luoghi scartisce qualsiasi dato locale associato a quell'utente. Puoi usare le seguenti approcci per gestire la persistenza dei dati tra i luoghi.
Se la tua esperienza utilizza dati sicuri come valuta in-experience o Inventario, reportorio, implementa archivi di dati o archivi di memoria per mantenere i dati dal luogo al Posto.
Per inviare dati di base non sicuri da luogo a Posto, chiama TeleportOptions:SetTeleportData() prima di passarlo a TeleportAsync() .
local teleportData = {randomNumber = RNG:NextInteger(1, 100),}local teleportOptions = Instance.new("TeleportOptions")teleportOptions:SetTeleportData(teleportData)
Per ottenere tutti i dati di un utente che arriva da un teletrasporto sul Server, usa la funzione Player:GetJoinData() , che restituisce un dizionario tra i dati associati all'utente.
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)
Per recuperare solo i dati di teletrasporto sul client, puoi usare TeleportService:GetLocalPlayerTeleportData() .
Handling Failed Teleports
Come qualsiasi chiamata API che coinvolge richieste di rete, i teleporti potrebbero fallire e lanciare un errore. Anche se una chiamata ha successo e il teletrasporto inizia, può ancora fallire all'ultimo momento senza lanciare un errore e lasciare l'utente nel Server. Quando questo accade, si attiva TeleportService.TeleportInitFailed .
Wrap teleports in a protected call ( pcall() ) and retry if it fails. The following example ModuleScript definisce una funzione SafeTeleport per teletrasportare l'utente in un call protetto e una funzione 1> HandleFailedTeleport1> per retry failed teleports that are one-time hiccups
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) -- teleport the user in a protected call per prevenire erroring
end)
attemptIndex += 1
if not success then
task.wait(RETRY_DELAY)
end
until success or attemptIndex == ATTEMPT_LIMIT -- smetti di tentare la teletrasporto se la chiamata è riuscita, o se il limite di riprova è stato raggiunto
if not success then
warn(result) -- output
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
-- se il teletrasporto non è valido, segnala l'errore invece di riprovare
error(("Invalid teleport [%s]: %s"):format(teleportResult.Name, errorMessage))
end
SafeTeleport(targetPlaceId, {player}, teleportOptions)
end
TeleportService.TeleportInitFailed:Connect(handleFailedTeleport)
return SafeTeleport
La funzione SafeTeleport riceve gli stessi argomenti della funzione Class.TeleportService:TeleportAsync()|TeleportAsync() . Puoi utilizzare il seguente Class.ModuleScript con la funzione 1> SafeTeleport1> per eseguire i teletrasporti da qualsiasi luogo nella tua esperienza per ridurre i teletrasporti non riusciti.
local Players = game:GetService("Players")local ServerScriptService = game:GetService("ServerScriptService")local SafeTeleport = require(ServerScriptService.SafeTeleport)local TARGET_PLACE_ID = 1818 -- 置き換え con il tuo ID luogolocal playerToTeleport = Players:GetPlayers()[1] -- ottenere il primo utente nel giocoSafeTeleport(TARGET_PLACE_ID, {playerToTeleport}, teleportOptions)