場所間のテレポート

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

多くの場所で構成されたエクスペリエンス、例えばファンタジーの世界での複数の町、城、ダンジョン、広大な森など、ユーザーがユニバースの場所間でテレポートできるようにするには、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.TeleportGui
TeleportService: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)