多くの場所で構成されたエクスペリエンス、例えばファンタジーの世界での複数の町、城、ダンジョン、広大な森など、ユーザーがユニバースの場所間でテレポートできるようにするには、TeleportService を使用して、ユーザーがテレポートする場所を構成できます。
テレポートを設定中
エクスペリエンスでテレポートを有効にするには、TeleportService:TeleportAsync() を使用します。メソッドは 3つのパラメータを受信します:
- ユーザーがテレポートする PlaceId 。
- ユーザーがテレポートする Player インスタンスを表示するアレイ。
- オプションの TeleportOptions インスタンス、カスタムプロパティを含む 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)
テレポートを設定するときにエラーを処理するためのヒントを取るには、ハンドリング失敗したテレポート を参照してください。
クロスエクスペリエンステレポートを有効化
セキュリティ目的で、ユーザーをエクスペリエンスから別のエクスペリエンスにテレポートするか、マップの周りを反復すると、デフォルトで失敗します。ユーザーエクスペリエンスのテレポートを有効にするには、ゲーム設定 > 2>セキュリティ2> > 5>マップ5> を開きます。
カスタムテレポート画面を作成する
ユーザーがテレポートをトリガーすると、Roblox の標準ロード画面が表示されます。クライアントで Class.TeleportService:SetTeleportGui
local TeleportService = game:GetService("TeleportService")local ReplicatedStorage = game:GetService("ReplicatedStorage")local teleportGui = ReplicatedStorage.TeleportGuiTeleportService:SetTeleportGui(teleportGui)
テレポートオプションのカスタマイズ
ユーザーを特定のサーバーにテレポートするなど、ユーザーを特定のサーバーにテレポートする 、およびユーザーデータをテレポートしながらテレポート をカスタマイズするには、TeleportOptions インスタンスを設定し、1> Class.TeleportService:TeleportAsync()1> メ
特定のサーバーにテレポート中
ユーザーを特定のサーバーにテレポートするには、TeleportOptions を使用してターゲットサーバーを設定し、Class.TeleportService:TeleportAsync() メソッドにパスします。ユーザーをリストに指定しないと、サーバーはマッチメイドの公開サーバーにテレポートされます。リストの最初のユーザーの
ユーザーを特定の公開サーバーにテレポートするには、TeleportOptions.ServerInstanceId プロパティを有効なインスタンス ID として設定し、これは公開サーバーにユニークな識別子です。
local teleportOptions = Instance.new("TeleportOptions")teleportOptions.ServerInstanceId = targetServerId
ユーザーを指定の予約サーバーにテレポートするには、Class.TeleportOptions.ReservedServerAccessCode 、これは、予約サーバーに入るユニークなコードです。
local teleportOptions = Instance.new("TeleportOptions")teleportOptions.ReservedServerAccessCode = reservedServerCode
ユーザーを新しい予約サーバーにテレポートするには、TeleportOptions.ShouldReserveServer を true に設定します。
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 コールで、テレポートは失敗し、エラーをスローする可能性があります。エラーがスローされてユーザーがサーバーに残っている場合でも、最後の瞬間に失敗し、エラーをスローしてユーザーをサーバーに残します。これが発生すると、TeleportService.TeleportInitFailed がトリガーさ
ラップテレポートを保護されたコール (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
-- テレポートが無効である場合、エラーを報告し、再試行します
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.TeleportService:TeleportAsync()|TeleportAsync()1> 機能と共通の参数を使用して、エクスペリエンス内の任意の場所からテレポートを実行して
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)