Teleportieren zwischen Orten

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Wenn Sie ein Erlebnis mit vielen verschiedenen Orten, wie einer Fantasy-Welt mit mehreren Städten, Schlössern, Dungeons und einem riesigen Wald, erstellen möchten, können Sie TeleportService verwenden, um Benutzern zu ermöglichen, sich zwischen Orten in einem Universum, Servern oder sogar zu einer anderen Erfahrung zu teleportieren.

Teleportation einrichten

Um Teleportation in deiner Erlebniszu aktivieren, verwende TeleportService:TeleportAsync(). Die Methode akzeptiert drei Argumente:

  • Der PlaceId für Benutzer, zu denen sie teleportieren.
  • Ein Array, das die Player Instanzen enthält, die die Benutzer zum teleportierendarstellen.
  • Eine optionale TeleportOptions Instanz, die benutzerdefinierte Eigenschaften für die Class.TeleportService:TeleportAsync()|TeleportAsync() -Anruf enthält.

local Players = game:GetService("Players")
local TeleportService = game:GetService("TeleportService")
local TARGET_PLACE_ID = 1234 -- ersetzen Sie mit Ihrer eigenen Platz-ID
local playerToTeleport = Players:GetPlayers()[1] -- erhalte den ersten benutzer in der erlebnis
TeleportService:TeleportAsync(TARGET_PLACE_ID, {playerToTeleport}, teleportOptions)

Wenn Sie Vorsichtsmaßnahmen bei der Fehlerbehandlung beim Aufbau von Teleportationen befolgen möchten, sehen Sie Teleport-Fehlerbehandlung-Vorsichtsmaßnahmen.

Cross-Erlebnis-Teleportation aktivieren

Aus Sicherheitsgründen teleportiert ein Benutzer von deiner Erfahrung zu einer anderen Erfahrung, die von anderen besessen wird, oder umgekehrt, fehlert standardmäßig. Um die Cross-Erlebnisteleportierung zu aktivieren, öffne Spieleinstellungen > Sicherheit und aktiviere Erlaube Dritten-Teleports auf Studio.

Benutzerdefinierte Teleport-Bildschirme erstellen

Wenn ein Benutzer auf einen teleportierentrifft, sieht er den Standard-Roblox-Ladebildschirm, während er auf die neue Stelle wartet, um sie zu laden. Sie können einen benutzerdefinierten Teleport-B


local TeleportService = game:GetService("TeleportService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local teleportGui = ReplicatedStorage.TeleportGui
TeleportService:SetTeleportGui(teleportGui)

Teleport-Optionen anpassen

Du kannst Teleportationen anpassen, wie z. B. Benutzer zu einem bestimmten Server teleportieren und Benutzerdaten mit Teleports senden, indem du die TeleportOptions Instanz setzt und sie dem 2> Class.TeleportService:TeleportAsync() -Methode übergibt.

Teleportieren zu bestimmten Servern

Um Benutzer zu bestimmten Servern zu teleportieren, setze den Ziel-Server mit TeleportOptions und übergebe ihn an den TeleportService:TeleportAsync()-Methode. Wenn du keinen Server angebenst, werden Benutzer in einen Matchmade-Public-Server teleportiert. Die Information des ersten Benutzers in der Liste wird verwendet, um auf diesen öffentlichen Server zu matchmake.

Um Benutzer zu einem bestimmten öffentlichen Server zu teleportieren, setze die TeleportOptions.ServerInstanceId Eigenschaft als gültige Instanz-ID, die ein eindeutiger Identifikator für einen öffentlichen Server ist.


local teleportOptions = Instance.new("TeleportOptions")
teleportOptions.ServerInstanceId = targetServerId

Um Benutzer zu einem bestimmten reservierten Server zu teleportieren, setzen Sie einen gültigen TeleportOptions.ReservedServerAccessCode , der ein einzigartiger Code ist, um einen reservierten Server einzugeben.


local teleportOptions = Instance.new("TeleportOptions")
teleportOptions.ReservedServerAccessCode = reservedServerCode

Um Benutzer zu einem neuen reservierten Server zu teleportieren, setze TeleportOptions.ShouldReserveServer auf true.


local teleportOptions = Instance.new("TeleportOptions")
teleportOptions.ShouldReserveServer = true

Benutzerdaten mit Teleports senden

Das Teleportieren eines Benutzers zwischen Orten zieht alle lokalen Daten, die mit diesem Benutzer verbunden sind, auf. Du kannst die folgenden Ansätze verwenden, um die Datenver persistenz zwischen Orten zu verwalten.

  • Wenn deine Erfahrung sichere Benutzerdaten wie In-Experience-Währung oder Inventar verwendet, implementiere Datenspeicher oder Speicherstände, um Daten von Ort zu Ort zu behalten.

  • Um grundlegende nicht sichere Daten von Ort zu Ort zu senden, rufen Sie TeleportOptions:SetTeleportData() auf, bevor Sie sie an Class.TeleportService:TeleportAsync()|TeleportAsync() übergeben.


local teleportData = {
randomNumber = RNG:NextInteger(1, 100),
}
local teleportOptions = Instance.new("TeleportOptions")
teleportOptions:SetTeleportData(teleportData)

Um alle Daten eines Benutzers, der von einem Teleport auf dem Server kommt, zu erhalten, verwenden Sie die Funktion Player:GetJoinData(), die ein Wörterbuch zurückgibt, einschließlich der Daten, die mit dem Benutzer verbunden sind.


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)

Um nur die Teleport-Daten auf dem Client wiederzurufen, kannst du TeleportService:GetLocalPlayerTeleportData() verwenden.

Steuerung fehlgeschlagen Teleports

Wie jeden API-Aufruf, der Netzwerk-Anfragen enthält, kann ein Teleport fehlgeschlagen sein und einen Fehler anzeigen. Selbst wenn ein Aufruf erfolgreich ist und der Teleport initiiert wird, kann er im letzten Moment immer noch fehlgeschlagen sein, ohne einen Fehler zu werfen und den Benutzer im Server zu lassen. Wenn dies geschieht, wird es ausgelöst TeleportService.TeleportInitFailed .

Wrap teleports in a protected call ( pcall() ) and retry if it fails. The following example ModuleScript definiert eine SafeTeleport -Funktion, um den Codesin einem geschützten Anruf zu teleportieren, und eine 1> HandleFailedTeleport -Funktion, um teleports, die ein-


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 -- definieren sie pcall-ergebnisse außerhalb der loop, damit die ergebnisse später gemeldet werden können
repeat
success, result = pcall(function()
return TeleportService:TeleportAsync(placeId, players, options) -- teleportiere den benutzer in einem geschützten anruf, um einen fehler zu vermeiden
end)
attemptIndex += 1
if not success then
task.wait(RETRY_DELAY)
end
until success or attemptIndex == ATTEMPT_LIMIT -- stoppen sie, wenn der anruf erfolgreich ist, oder wenn der teleport-begrenzungslimit erreicht ist
if not success then
warn(result) -- drucke den fehlergrund zum ausgabe
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
-- wenn der teleport ungültig ist, melden sie den fehler, anstatt es erneut zu versuchen
error(("Invalid teleport [%s]: %s"):format(teleportResult.Name, errorMessage))
end
SafeTeleport(targetPlaceId, {player}, teleportOptions)
end
TeleportService.TeleportInitFailed:Connect(handleFailedTeleport)
return SafeTeleport

Die Funktion SafeTeleport nimmt die gleichen Argumente wie die Funktion TeleportAsync() an. Sie können die folgende ModuleScript mit der Funktion 1>SafeTeleport1> verwenden, um Teleports von überall in Ihrem Erlebnis zu führen, um fehlgeschlagene Teleports zu reduzieren.


local Players = game:GetService("Players")
local ServerScriptService = game:GetService("ServerScriptService")
local SafeTeleport = require(ServerScriptService.SafeTeleport)
local TARGET_PLACE_ID = 1818 -- ersetzen Sie mit Ihrer eigenen Platz-ID
local playerToTeleport = Players:GetPlayers()[1] -- erhalte den ersten benutzer im spiel
SafeTeleport(TARGET_PLACE_ID, {playerToTeleport}, teleportOptions)