หากคุณต้องการสร้างประสบการณ์ที่มีสถานที่หลายแห่ง เช่นโลกแห่งความฝันที่มีเมืองหลายเมืองปราสาทดันเจี้ยนและป่ากว้างขวาง คุณสามารถใช้ TeleportService เพื่อเปิดให้ผู้ใช
การติดตั้งการเคลื่อนที่ทางไกล
เพื่อเปิดใช้งานการเคลื่อนย้ายในประสบการณ์ของคุณให้ใช้ TeleportService:TeleportAsync() วิธีการรับประกันสามประมาณตัว:
- Class.DataModel.PlaceId|PlaceId สำหรับผู้ใช้ที่จะเทเลพอร์ตไปยัง
- รายการที่ประกอบด้วย Player ตัวอย่างที่เป็นตัวแทนผู้ใช้เพื่อเทเลพอร์ต
- ตัวอย่าง TeleportOptions ที่มีสมบัติสมบัติที่กำหนดเองสำหรับการโทร TeleportAsync() โทร
local Players = game:GetService("Players")local TeleportService = game:GetService("TeleportService")local TARGET_PLACE_ID = 1234 -- แทนที่ด้วยรหัสสถานที่ของคุณเองlocal playerToTeleport = Players:GetPlayers()[1] -- รับผู้ใช้ตัวแรกในประสบการณ์TeleportService:TeleportAsync(TARGET_PLACE_ID, {playerToTeleport}, teleportOptions)
หากคุณต้องการใช้มาตรการป้องกันข้อผิดพลาดในการติดตั้งการเคลื่อนย้าย, ดู การจัดการล้มเหลวการเคลื่อนย้าย .
เปิดใช้งานการเคลื่อนย้ายข้ามประสบการณ์
เพื่อวัตถุประสงค์ด้านความปลอดภัย การเคลื่อนย้ายผู้ใช้จากประสบการณ์ของคุณไปยังประสบการณ์ของผู้อื่น หรือวิธีการอื่น ๆ จะล้มเหลวโดยปกติ เพื่อเปิดใช้งานการเค
การสร้างหน้าจอเทเลพอร์ตที่กําหนดเอง
เทเลพอร์ตพวกเขาจะเห็นหน้าจอการโหลดแ
local TeleportService = game:GetService("TeleportService")local ReplicatedStorage = game:GetService("ReplicatedStorage")local teleportGui = ReplicatedStorage.TeleportGuiTeleportService:SetTeleportGui(teleportGui)
การปรับแต่งตัวเลือกการเคลื่อนย้าย
คุณสามารถปรับแต่งการเคลื่อนย้ายได้, เช่น การเคลื่อนย้ายผู้ใช้ไปยังเซิร์ฟเวอร์ที่กำหนดเอง และ การส่งข้อมูลผู้ใช้พร้อมกับการเคลื่อนย้าย
การเทเลพอร์ตไปยังเซิร์ฟเวอร์ที่กำหนดเฉพาะ
เพื่อเทเลพอร์ตผู้ใช้ไปยังเซิร์ฟเวอร์เฉพาะให้ใช้ TeleportOptions และส่งมันไปยังวิธี TeleportService:TeleportAsync() หากคุณไม่ระบุเซิร์ฟเวอร์ผู้ใช้จะถูกเทเล
เพื่อเทเลพอร์ตผู้ใช้ไปยังเซิร์ฟเวอร์สาธารณะเฉพาะ TeleportOptions.ServerInstanceId โปรไฟล์ให้เป็นรหัสริงที่เป็นเอกลักษณ์สำหรับเซิร์ฟเวอร์สาธารณะ
local teleportOptions = Instance.new("TeleportOptions")teleportOptions.ServerInstanceId = targetServerId
เพื่อนำผู้ใช้ไปยังเซิร์ฟเวอร์ที่จองไว้เป็นพิเศษ, ตั้ง TeleportOptions.ReservedServerAccessCode ที่เป็นรหัสเฉพาะเพื่อการเข้าถึงเซิร์ฟเวอร์ที่จองไว้
local teleportOptions = Instance.new("TeleportOptions")teleportOptions.ReservedServerAccessCode = reservedServerCode
เพื่อเทเลพอร์ตผู้ใช้ไปยังเซิร์ฟเวอร์ที่จองไว้ใหม่ให้ตั้ง TeleportOptions.ShouldReserveServer เป็นค่าจริง
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()
การจัดการการล้มเหลวของ Teleports
เช่นเดียวกับการโทร API ที่เกี่ยวข้องกับคำขอเครือข่าย, การเคลื่อนที่อาจล้มเหลวและแสดงข้อผิดพลาด แม้ว่าการโทรสำเร็จและเริ่มต้น, มันยังสามารถเกิดขึ้นในขณะสุดท้
หุ้มเทเลพอร์ตในการโทรครั้งป้องกัน ( pcall() ) และทำซ้ำหากมันล้มเหลว ตัวอย่างต่อไปนี้ ModuleScript จะกำ
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
-- หาก teleport ไม่ถูกต้อง รายงานข้อผิดพลาดแทนที่จะลองใหม่
error(("Invalid teleport [%s]: %s"):format(teleportResult.Name, errorMessage))
end
SafeTeleport(targetPlaceId, {player}, teleportOptions)
end
TeleportService.TeleportInitFailed:Connect(handleFailedTeleport)
return SafeTeleport
ฟังก์ชัน SafeTeleport รับอาร์กุตเดียวกับฟังก์ชัน TeleportAsync() คุณสามารถใช้ ModuleScript ด้วย 1> SafeTeleport1> ฟังก์ชันเพื่อดำเนินการ
local Players = game:GetService("Players")local ServerScriptService = game:GetService("ServerScriptService")local SafeTeleport = require(ServerScriptService.SafeTeleport)local TARGET_PLACE_ID = 1818 -- แทนที่ด้วยรหัสสถานที่ของคุณเองlocal playerToTeleport = Players:GetPlayers()[1] -- รับผู้ใช้คนแรกในเกมSafeTeleport(TARGET_PLACE_ID, {playerToTeleport}, teleportOptions)