😺
【Roblox】別のプレースへテレポートさせる方法
はじめに
公式Reference
実装
オブジェクトなどの配置
- テレポートボタンの配置
- RemoteEventの配置
移動先のプレース作成
表示タブを押しアセット管理表示ボタンを押す
するとこのようなwindowが出るのでプレースをダブルクリック
空白部分で右クリックをし新しいプレースを追加します。
追加したらそのプレースを右クリックしIDを取得しメモしておきます
またそのプレースの欄をダブルクリックすると新しくRobloxStudioが開きます
fileタブからRobloxに公開をクリックで準備完了!
コード
作成するスクリプトファイルはこちらの三つになります。
まずはLocalScriptの内容
local proximityPrompt = workspace.Part.ProximityPrompt
local remoteEvent = game.ReplicatedStorage.RemoteEvent
proximityPrompt.Triggered:Connect(function(player)
print("Triggered")
remoteEvent:FireServer(player)
end)
ボタンを押したらイベントをサーバー側に飛ばすようにしてます。
続いて、モジュールスクリプトで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 -- define pcall results outside of loop so results can be reported later on
repeat
success, result = pcall(function()
return TeleportService:TeleportAsync(placeId, players, options) -- teleport the user in a protected call to prevent erroring
end)
attemptIndex += 1
if not success then
task.wait(RETRY_DELAY)
end
until success or attemptIndex == ATTEMPT_LIMIT -- stop trying to teleport if call was successful, or if retry limit has been reached
if not success then
warn(result) -- print the failure reason to 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
-- if the teleport is invalid, report the error instead of retrying
error(("Invalid teleport [%s]: %s"):format(teleportResult.Name, errorMessage))
end
SafeTeleport(targetPlaceId, {player}, teleportOptions)
end
TeleportService.TeleportInitFailed:Connect(handleFailedTeleport)
return SafeTeleport
そしてScriptファイルでこれらの処理を書き合わせ実際に動作するようにします。
local TeleportService = game:GetService("TeleportService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerScriptService = game:GetService("ServerScriptService")
local remoteEvent = ReplicatedStorage.RemoteEvent
local SafeTeleport = require(ServerScriptService.SafeTeleport)
remoteEvent.OnServerEvent:Connect(function(player, targetPlaceID)
local placedId = 18758089915
local server = TeleportService:ReserveServer(placedId)
local options = Instance.new("TeleportOptions")
options.ReservedServerAccessCode = server
SafeTeleport(placedId,{player},options)
end)
実行する
RobloxStudioではテレポートできないのでwebから自分の作成したゲームを開きRobloxを実行して試す感じになります。
動画
Discussion