Se vuoi costruire un'esperienza con molti luoghi distinti, come un mondo di fantasia con più città, castelli, dungeon e una vasta foresta, puoi usare TeleportService per consentire agli utenti di teletrasportarsi tra luoghi in un universo, server o persino in un'altra esperienza.
Configura la teleportazione
Per abilitare la teleportazione nella tua esperienza, usa TeleportService:TeleportAsync() . Il metodo accetta tre parametri:
- Il PlaceId per gli utenti da teletrasportare.
- Un array che contiene le Player istanze che rappresentano gli utenti da Teletrasporto.
- Un'istanza opzionale TeleportOptions che contiene proprietà personalizzate per la chiamata TeleportAsync().
local Players = game:GetService("Players")local TeleportService = game:GetService("TeleportService")local TARGET_PLACE_ID = 1234 -- sostituisci con l'ID del tuo postolocal playerToTeleport = Players:GetPlayers()[1] -- ottenere il primo utente nell'esperienzaTeleportService:TeleportAsync(TARGET_PLACE_ID, {playerToTeleport}, teleportOptions)
Se vuoi prendere precauzioni di gestione degli errori durante la configurazione della teleportazione, vedi come gestire i teleporti falliti.
Abilita la teleportazione cross-esperienza
Per motivi di sicurezza, teletrasportare un utente dalla tua esperienza a un'altra esperienza di proprietà di altri, o viceversa, fallisce per impostazione predefinita.Per abilitare la teleportazione transesperienziale, apri Impostazioni di gioco > Sicurezza e abilita Consenti teletrasporti di terze parti su Studio.
Crea schermi di teletrasporto personalizzati
Quando un utente attiva un Teletrasporto, vede lo schermo di caricamento standard di Roblox mentre attende che il nuovo luogo si carichi.Puoi aggiungere uno schermo di teletrasporto personalizzato per migliorare l'immersione per gli utenti chiamando TeleportService:SetTeleportGui() sul client e passando attraverso il ScreenGui prima di teletrasportare l'utente.L'esempio seguente imposta un personalizzato ScreenGui situato in ReplicatedStorage come schermo di caricamento quando avviene un teletrasporto.Non esegue alcun script all'interno del ScreenGui .
local TeleportService = game:GetService("TeleportService")local ReplicatedStorage = game:GetService("ReplicatedStorage")local teleportGui = ReplicatedStorage.TeleportGuiTeleportService:SetTeleportGui(teleportGui)
Personalizza le opzioni di teletrasporto
Puoi personalizzare le teletrasmissioni, come teletrasportare gli utenti su un server specifico e inviare i dati degli utenti insieme alle teletrasmissioni , impostando l'istanza e passandola al metodo >.
Teletrasporto su server specifici
Per teletrasportare gli utenti su server specifici, imposta il server target utilizzando TeleportOptions e passalo al metodo TeleportService:TeleportAsync().Se non specifici un Server, gli utenti vengono teletrasportati in un Serverpubblico matchmade.Le informazioni del primo utente nella lista vengono utilizzate per fare matchmaking con quel Serverpubblico.
Per teletrasportare gli utenti su un Serverpubblico specifico, imposta la proprietà TeleportOptions.ServerInstanceId come ID di istanza valido, che è un identificatore univoco per un Serverpubblico.
local teleportOptions = Instance.new("TeleportOptions")teleportOptions.ServerInstanceId = targetServerId
Per teletrasportare gli utenti su un Serverriservato specifico, imposta un valido TeleportOptions.ReservedServerAccessCode, che è un codice univoco per l'ingresso in un Serverriservato.
local teleportOptions = Instance.new("TeleportOptions")teleportOptions.ReservedServerAccessCode = reservedServerCode
Per teletrasportare gli utenti su un nuovo Serverriservato, imposta TeleportOptions.ShouldReserveServer a vero.
local teleportOptions = Instance.new("TeleportOptions")teleportOptions.ShouldReserveServer = true
Invia dati utente insieme ai teletrasporti
Teletrasportare un utente tra i luoghi scarta tutti i dati locali associati a quell'utente.Puoi utilizzare i seguenti approcci per gestire la persistenza dei dati tra i luoghi.
Se la tua esperienza utilizza dati utente sicuri come valuta in-experience o Inventario, reportorio, implementa magazzini di dati o magazzini di memoria per mantenere i dati da luogo a Posto.
Per inviare dati di base non sicuri da luogo a Posto, chiama prima di passarlo a >.
local teleportData = {randomNumber = RNG:NextInteger(1, 100),}local teleportOptions = Instance.new("TeleportOptions")teleportOptions:SetTeleportData(teleportData)
Per ottenere tutti i dati di un utente in arrivo da un teletrasporto sul Server, usa la funzione Player:GetJoinData(), che restituisce un dizionario che include 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() .
Gestisci i teletrasporti falliti
Come qualsiasi chiamata API che coinvolge richieste di rete, i teleporti possono fallire e lanciare un errore.Avvolgili in chiamate protette ( pcall() ).Alcuni fallimenti beneficiano di riprove, in particolare quelli che coinvolgono server riservati, quindi raccomandiamo di riprovare un certo numero di volte sui fallimenti.
Anche se una chiamata avviene e il teletrasporto inizia, può ancora fallire all'ultimo momento senza lanciare un errore e lasciare l'utente nel Server.Quando ciò accade, si attiva l'evento TeleportService.TeleportInitFailed.
L'esempio seguente ModuleScript definisce una funzione SafeTeleport per teletrasportare l'utente in una chiamata protetta con logica di riprova.Ha anche una funzione handleFailedTeleport per gestire situazioni in cui la chiamata è stata riuscita, ma il teletrasporto non è Si verificano.
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 -- definire i risultati di pcall al di fuori del ciclo in modo che i risultati possano essere segnalati in seguito
repeat
success, result = pcall(function()
return TeleportService:TeleportAsync(placeId, players, options) -- teletrasporta l'utente in una chiamata protetta per prevenire gli errori
end)
attemptIndex += 1
if not success then
task.wait(RETRY_DELAY)
end
until success or attemptIndex == ATTEMPT_LIMIT -- smetti di tentare il teletrasporto se la chiamata è stata riuscita, o se il limite di riprova è stato raggiunto
if not success then
warn(result) -- stampa il motivo del fallimento da 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 TeleportAsync() .Puoi usare il seguente ModuleScript con la funzione SafeTeleport per eseguire teletrasporti da qualsiasi punto della tua esperienza per ridurre i teletrasporti falliti.
local Players = game:GetService("Players")local ServerScriptService = game:GetService("ServerScriptService")local SafeTeleport = require(ServerScriptService.SafeTeleport)local TARGET_PLACE_ID = 1818 -- sostituisci con l'ID del tuo postolocal playerToTeleport = Players:GetPlayers()[1] -- ottenere il primo utente nel giocoSafeTeleport(TARGET_PLACE_ID, {playerToTeleport}, teleportOptions)