ประสบการณ์ Roblox เป็นผู้เล่นหลายคนโดยค่าเริ่มต้น ดังนั้นประสบการณ์ทั้งหมดจะสื่อสารกับเซิร์ฟเวอร์และไคลเอนต์ที่เชื่อมต่อกับผู้เล่นโดยธรรมชาติในกรณีที่ง่ายที่สุด เมื่อผู้เล่นย้ายตัวละครของพวกเขา คุณสมบัติบางอย่าง Humanoid เช่นสถานะ จะถูกสื่อสารไปยังเซิร์ฟเวอร์ซึ่งส่งข้อมูลนี้ไปยังไคลเอนต์ที่เชื่อมต่ออื่น
อีเวนต์และคอลเลกชันระยะไกลช่วยให้คุณสื่อสาร ข้าม ขอบเขตไคลเอนต์-เซิร์ฟเวอร์:
- RemoteEvents เปิดใช้งานการสื่อสารแบบเดียวทาง (ส่งคำขอและ ไม่ ยอมแพ้สำหรับการตอบสนอง)
- UnreliableRemoteEvents เปิดใช้งานการสื่อสารแบบเดียวสำหรับข้อมูลที่เปลี่ยนแปลงอย่างต่อเนื่องหรือไม่สำคัญต่อสถานะเกมอีเวนต์เหล่านี้ใช้คำสั่งซื้อและความน่าเชื่อถือเพื่อเพิ่มประสิทธิภาพเครือข่ายที่ดีขึ้น
- RemoteFunctions เปิดใช้งานการสื่อสารแบบสองทาง (ส่งคำขอและรอจนกว่าจะได้รับคำตอบจากผู้รับ)
ไม่เหมือนกับ อีเวนต์ที่ผูกได้ ซึ่งมีความจำกัดในการใช้งานมากขึ้น กรณีการใช้งานสำหรับอีเวนต์และฟังก์ชันระยะไกลมีมากเกินไปที่จะระบุได้:
- เกมเพลย์ - การเล่นเกมเช่น ผู้เล่นถึงจุดสิ้นสุดของระดับ อาจต้องใช้เหตุการณ์ระยะไกลสคริปต์ไคลเอนต์แจ้งเซิร์ฟเวอร์และสคริปต์เซิร์ฟเวอร์รีเซ็ตตำแหน่งผู้เล่น
- การตรวจสอบเซิร์ฟเวอร์ - หากผู้เล่นพยายามดื่มยา พวกเขามีจริงๆ มี ยานั้นหรือไม่? เพื่อให้แน่ใจว่ายุติธรรม เซิร์ฟเวอร์จะต้องเป็นแหล่งความจริงสำหรับประสบการณ์สคริปต์ไคลเอนต์สามารถใช้เหตุการณ์ระยะไกลเพื่อแจ้งให้เซิร์ฟเวอร์ทราบว่าผู้เล่นกำลังดื่มยา จากนั้นสคริปต์เซิร์ฟเวอร์สามารถตัดสินใจได้ว่าผู้เล่นมียานั้นจริงหรือไม่และจะให้ประโยชน์หรือไม่
- การอัปเดตอินเทอร์เฟซผู้ใช้ - เมื่อสถานะของเกมเปลี่ยนไป สคริปต์เซิร์ฟเวอร์สามารถใช้เหตุการณ์ระยะไกลเพื่อแจ้งให้ลูกค้าทราบถึงการเปลี่ยนแปลงคะแนน เป้าหมาย ฯลฯ
- การซื้อในตลาดประสบการณ์ - สำหรับการดำเนินการตัวอย่างที่ใช้ฟังก์ชันระยะไกลดูที่ การซื้อสมัครสมาชิกแบบรวดเร็ว
อ้างอิงด่วน
ตารางต่อไปนี้ให้ข้อมูลอ้างอิงรวดเร็วสำหรับวิธีการใช้ RemoteEvents และ RemoteFunctions เพื่อสื่อสารระหว่างไคลเอนต์และเซิร์ฟเวอร์
ไคลเอนต์ → เซิร์ฟเวอร์ | |
---|---|
ไคลเอนต์ | RemoteEvent:FireServer(args) |
เซิร์ฟเวอร์ | RemoteEvent.OnServerEvent:Connect(function(player, args)) |
เซิร์ฟเวอร์ → ไคลเอนต์ | |
เซิร์ฟเวอร์ | RemoteEvent:FireClient(player, args) |
ไคลเอนต์ | RemoteEvent.OnClientEvent:Connect(function(args)) |
เซิร์ฟเวอร์ → ลูกค้าทั้งหมด | |
เซิร์ฟเวอร์ | RemoteEvent:FireAllClients(args) |
ไคลเอนต์ | RemoteEvent.OnClientEvent:Connect(function(args)) |
อีเวนต์ระยะไกล
วัตถุ RemoteEvent ช่วยให้การสื่อสารแบบไม่ซิงโครไนซ์หนึ่งทางข้ามขอบเขตไคลเอนต์-เซิร์ฟเวอร์โดยไม่ต้องรอคำตอบ
เพื่อสร้างใหม่ RemoteEvent ผ่านหน้าต่าง Explorer ใน Studio:
- เลื่อนเมาส์ไปเหนือภาชนะที่คุณต้องการใส่ RemoteEventเพื่อให้แน่ใจว่าทั้งเซิร์ฟเวอร์และไคลเอนต์สามารถเข้าถึงได้ ต้องอยู่ในสถานที่ที่ทั้งสองฝ่ายสามารถมองเห็นได้ เช่น ReplicatedStorage , แม้ว่าในบางกรณีจะเหมาะสมที่จะเก็บไว้ใน Workspace หรือภายใน Tool
- คลิกปุ่ม ⊕ ที่ปรากฏทางด้านขวาของชื่อคอนเทนเนอร์และใส่ตัวอย่าง กิจกรรมระยะไกล 3. เปลี่ยนชื่อตัวอย่างเพื่ออธิบายวัตถุประสงค์
เมื่อคุณสร้าง RemoteEvent แล้ว มันสามารถช่วยให้การสื่อสารแบบเดียวทางจาก ไปยังเซิร์ฟเวอร์ จาก เซิร์ฟเวอร์ไปยังลูกค้า หรือจาก เซิร์ฟเวอร์ไปยังลูกค้าทั้งหมด



ไคลเอนต์ → เซิร์ฟเวอร์
คุณสามารถใช้ เพื่อเรียกการเหตุการณ์บนเซิร์ฟเวอร์ โดยเรียกใช้วิธี บน หากคุณส่งอาร์กิวเมนต์ไปที่ FireServer() พวกเขาจะส่งไปยังตัวจัดการอีเวนต์บนเซิร์ฟเวอร์ด้วยข้อจํากัดบางอย่าง โปรดทราบว่าพารามิเตอร์แรกของตัวจัดการเหตุการณ์บนเซิร์ฟเวอร์เสมอคือวัตถุ Player ของไคลเอนต์ที่เรียกมัน ติดตาม
ไคลเอนต์ | RemoteEvent:FireServer(args) |
เซิร์ฟเวอร์ | RemoteEvent.OnServerEvent:Connect(function(player, args)) |
ต่อไปนี้ Script เชื่อมต่อตัวจัดการเหตุการณ์กับ OnServerEvent ที่สร้างเหตุการณ์ใหม่ Part บนเซิร์ฟเวอร์ต่อไปนี้คือการเรียก จากตัวอย่างที่มี และ สำหรับส่วนที่ต้องการ และ สำหรับส่วน
การเชื่อมต่ออีเวนต์ - สคริปต์
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Workspace = game:GetService("Workspace")
-- รับการอ้างอิงถึงตัวอย่างอีเวนต์ระยะไกล
local remoteEvent = ReplicatedStorage:FindFirstChildOfClass("RemoteEvent")
local function onCreatePart(player, partColor, partPosition)
print(player.Name .. " fired the RemoteEvent")
local newPart = Instance.new("Part")
newPart.Color = partColor
newPart.Position = partPosition
newPart.Parent = Workspace
end
-- เชื่อมฟังก์ชันกับอีเวนต์
remoteEvent.OnServerEvent:Connect(onCreatePart)
การยิงอีเวนต์ - สคริปท์ท้องถิ่น
local ReplicatedStorage = game:GetService("ReplicatedStorage")-- รับการอ้างอิงถึงตัวอย่างอีเวนต์ระยะไกลlocal remoteEvent = ReplicatedStorage:FindFirstChildOfClass("RemoteEvent")-- ยิงเหตุการณ์ระยะไกลและส่งอาร์กิวเมนต์เพิ่มเติมremoteEvent:FireServer(Color3.fromRGB(255, 0, 0), Vector3.new(0, 25, -20))
เซิร์ฟเวอร์ → ไคลเอนต์
คุณสามารถใช้ เพื่อเรียกการเหตุการณ์บน ไคลเอนต์ โดยการเรียกใช้วิธี บน .อาร์กิวเมนต์แรกสำหรับ คือวัตถุของไคลเอนต์ที่คุณต้องการตอบสนองต่อเหตุการณ์ และอาร์กิวเมนต์เพิ่มเติมจะส่งไปยังไคลเอนต์ด้วยข้อจำกัดบางอย่าง โปรดทราบว่าตัวจัดการเหตุการณ์ไม่จำเป็นต้องรวมวัตถุ Player เป็นอาร์กิวเมนต์แรกเพราะคุณสามารถกำหนดผู้เล่นบนไคลเอนต์ด้วย Players.LocalPlayer ได้
เซิร์ฟเวอร์ | RemoteEvent:FireClient(player, args) |
ไคลเอนต์ | RemoteEvent.OnClientEvent:Connect(function(args)) |
ต่อไปนี้ LocalScript เชื่อมตัวจัดการอีเวนต์กับอีเวนต์ OnClientEventตามมา Script จากนั้นจะฟังผู้เล่นที่เข้าสู่เซิร์ฟเวอร์และเรียก FireClient() สำหรับแต่ละคนด้วยข้อมูลสุ่ม
การเชื่อมต่ออีเวนต์ - สคริปท์ท้องถิ่น
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
-- รับการอ้างอิงถึงตัวอย่างอีเวนต์ระยะไกล
local remoteEvent = ReplicatedStorage:FindFirstChildOfClass("RemoteEvent")
local player = Players.LocalPlayer
local function onNotifyPlayer(maxPlayers, respawnTime)
print("[Client] Event received by player", player.Name)
print(maxPlayers, respawnTime)
end
-- เชื่อมฟังก์ชันกับอีเวนต์
remoteEvent.OnClientEvent:Connect(onNotifyPlayer)
การยิงอีเวนต์ - สคริปต์
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
-- รับการอ้างอิงถึงตัวอย่างอีเวนต์ระยะไกล
local remoteEvent = ReplicatedStorage:FindFirstChildOfClass("RemoteEvent")
-- ฟังผู้เล่นที่เข้ามาและส่งเหตุการณ์ระยะไกลไปยังแต่ละ
local function onPlayerAdded(player)
print("[Server] Firing event to player", player.Name)
remoteEvent:FireClient(player, Players.MaxPlayers, Players.RespawnTime)
end
Players.PlayerAdded:Connect(onPlayerAdded)
เซิร์ฟเวอร์ → ลูกค้าทั้งหมด
คุณสามารถใช้ Script เพื่อเรียกการเหตุการณ์บนทุกไคลเอนต์โดยโทรไปที่วิธี FireAllClients() บน RemoteEventไม่เหมือนกับ FireClient() , วิธี FireAllClients() ไม่ต้องการวัตถุ Player เพราะมันจะส่ง RemoteEvent ไปยังลูกค้าทั้งหมด
เซิร์ฟเวอร์ | RemoteEvent:FireAllClients(args) |
ไคลเอนต์ | RemoteEvent.OnClientEvent:Connect(function(args)) |
ต่อไปนี้ LocalScript เชื่อมต่อตัวจัดการอีเวนต์กับอีเวนต์ OnClientEvent ซึ่งผลิตเวลานับถอยหลังที่เหลืออยู่ที่เกี่ยวข้อง Script จากนั้นเรียก FireAllClients() ในลูปทุกวินาทีเพื่อยิง RemoteEvent สำหรับลูกค้าทั้งหมด
การเชื่อมต่ออีเวนต์ - สคริปท์ท้องถิ่น
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- รับการอ้างอิงถึงตัวอย่างอีเวนต์ระยะไกล
local remoteEvent = ReplicatedStorage:FindFirstChildOfClass("RemoteEvent")
local function onTimerUpdate(seconds)
print(seconds)
end
-- เชื่อมฟังก์ชันกับอีเวนต์
remoteEvent.OnClientEvent:Connect(onTimerUpdate)
การยิงอีเวนต์ - สคริปต์
local ReplicatedStorage = game:GetService("ReplicatedStorage")-- รับการอ้างอิงถึงตัวอย่างอีเวนต์ระยะไกลlocal remoteEvent = ReplicatedStorage:FindFirstChildOfClass("RemoteEvent")local countdown = 5-- ยิงอีเวนต์ระยะไกลทุกวินาทีจนกว่าเวลาจะหมดลงfor timeRemaining = -1, countdown doremoteEvent:FireAllClients(countdown - timeRemaining)task.wait(1)end
การโทรกลับระยะไกล
วัตถุ RemoteFunction ช่วยให้การสื่อสารแบบสองทางแบบเรียลไทม์ข้ามขอบเขตไคลเอนต์-เซิร์ฟเวอร์ผู้ส่งฟังก์ชันระยะไกลจะส่งจนกว่าจะได้รับคำตอบจากผู้รับ
เพื่อสร้างใหม่ RemoteFunction ผ่านหน้าต่าง Explorer ใน Studio:
- เลื่อนเมาส์ไปเหนือภาชนะที่คุณต้องการใส่ RemoteFunctionเพื่อให้แน่ใจว่าทั้งเซิร์ฟเวอร์และไคลเอนต์สามารถเข้าถึงได้ ต้องอยู่ในสถานที่ที่ทั้งสองฝ่ายสามารถมองเห็นได้ เช่น ReplicatedStorage , แม้ว่าในบางกรณีจะเหมาะสมที่จะเก็บไว้ใน Workspace หรือภายใน Tool
- คลิกปุ่ม ⊕ ที่ปรากฏทางด้านขวาของชื่อคอนเทนเนอร์และใส่ตัวอย่าง การฟังก์ชันระยะไกล 3. เปลี่ยนชื่อตัวอย่างเพื่ออธิบายวัตถุประสงค์
เมื่อคุณสร้าง RemoteFunction คุณสามารถอำนวยความสะดวกในการสื่อสารแบบสองทางระหว่าง ไคลเอนต์และเซิร์ฟเวอร์ หรือระหว่าง เซิร์ฟเวอร์และไคลเอนต์


ไคลเอนต์ → เซิร์ฟเวอร์ → ไคลเอนต์
คุณสามารถใช้ LocalScript เพื่อเรียกฟังก์ชันบนเซิร์ฟเวอร์ โดยโทรหาวิธี InvokeServer() บน RemoteFunctionไม่เหมือนกับเหตุการณ์ระยะไกล เหตุการณ์ ที่เรียกใช้จะให้ผลจนกว่าการโทรกลับจะส่งคืนอาร์กิวเมนต์ที่คุณส่งไปยัง InvokeServer() ส่งไปยังคอลเลกชัน OnServerInvoke ของ RemoteFunction ด้วยข้อจำกัดบางอย่าง โปรดทราบว่าหากคุณกำหนดการโทรกลับหลายครั้งไปยังเดียวกัน RemoteFunction เฉพาะการกำหนดค่าล่าสุดจะถูกดําเนินการ
ไคลเอนต์ | RemoteFunction:InvokeServer(args) |
เซิร์ฟเวอร์ | RemoteFunction.OnServerInvoke = function(player, args) |
ต่อไปนี้ Script กำหนดฟังก์ชันการโทรกลับผ่าน OnServerInvoke และส่งคืนค่าที่ร้องขอ Part ผ่านค่า return ของมันสิ่งที่ตามมา LocalScript จากนั้นเรียก InvokeServer() ด้วยอาร์กิวเมนต์เพิ่มเติมที่กำหนดสีและตำแหน่งส่วนที่ร้องขอ
การเชื่อมต่อการโทรกลับ - สคริปต์
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Workspace = game:GetService("Workspace")
-- รับการอ้างอิงถึงตัวอย่างฟังก์ชันระยะไกล
local remoteFunction = ReplicatedStorage:FindFirstChildOfClass("RemoteFunction")
-- ฟังก์ชันการโทรกลับ
local function createPart(player, partColor, partPosition)
print(player.Name .. " requested a new part")
local newPart = Instance.new("Part")
newPart.Color = partColor
newPart.Position = partPosition
newPart.Parent = Workspace
return newPart
end
-- กำหนดฟังก์ชันเป็น callback ของฟังก์ชันระยะไกล
remoteFunction.OnServerInvoke = createPart
การเรียกกิจกรรม - สคริปท์ท้องถิ่น
local ReplicatedStorage = game:GetService("ReplicatedStorage")-- รับการอ้างอิงถึงตัวอย่างฟังก์ชันระยะไกลlocal remoteFunction = ReplicatedStorage:FindFirstChildOfClass("RemoteFunction")-- ส่งสีและตำแหน่งเมื่อเรียกการโทรกลับlocal newPart = remoteFunction:InvokeServer(Color3.fromRGB(255, 0, 0), Vector3.new(0, 25, -20))-- ส่งออกส่วนอ้างอิงที่คืนกลับprint("The server created the requested part:", newPart)
เซิร์ฟเวอร์ → ไคลเอนต์ → เซิร์ฟเวอร์
คุณสามารถใช้ Script เพื่อเรียกฟังก์ชันบนไคลเอนต์โดยโทรหาวิธี InvokeClient() บน RemoteFunction แต่มีความเสี่ยงร้ายแรงดังต่อไปนี้:
- หากไคลเอนต์โยนข้อผิดพลาด เซิร์ฟเวอร์ก็โยนข้อผิดพลาดเช่นกัน
- หากไคลเอนต์ตัดการเชื่อมต่อในขณะที่ถูกเรียกใช้ InvokeClient() จะโยนข้อผิดพลาด
- หากไคลเอนต์ไม่ส่งค่ากลับ เซิร์ฟเวอร์จะให้บริการตลอดไป
สำหรับการดำเนินการที่ไม่ต้องการการสื่อสารแบบสองทาง เช่น การอัปเดต GUI ใช้ RemoteEvent และสื่อสารจาก เซิร์ฟเวอร์ไปยังไคลเอนต์
ข้อจํากัดของอาร์กิวเมนต์
เมื่อคุณยิง RemoteEvent หรือเรียก RemoteFunction คุณจะส่งอาร์กิวเมนต์ใดๆ ที่คุณส่งกับอีเวนต์หรือไปยังฟังก์ชัน callbackประเภทของวัตถุ Roblox ใดๆ เช่น Enum , Instance หรืออื่นๆ สามารถส่งได้เช่นกัน รวมถึงประเภท Luau เช่นตัวเลข สตริง และบูลีเนียน แม้ว่าคุณควรสำรวจข้อจำกัดต่อไปนี้อย่างระมัดระวัง
ดัชนีที่ไม่ใช่ข้อความ
หากดัชนีใด ๆ ของตารางที่ผ่านมา เป็นประเภทไม่ใช่ข้อความเช่น Instance , userdata หรือ ฟังก์ชัน Roblox จะแปลงดัชนีเหล่านั้นเป็นข้อความโดยอัตโนมัติ
การเชื่อมต่ออีเวนต์ - สคริปท์ท้องถิ่น
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local remoteEvent = ReplicatedStorage:FindFirstChildOfClass("RemoteEvent")
local function onEventFire(passedTable)
for k, v in passedTable do
print(typeof(k)) --> สตริง
end
end
-- เชื่อมฟังก์ชันกับอีเวนต์
remoteEvent.OnClientEvent:Connect(onEventFire)
การยิงอีเวนต์ - สคริปต์
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local remoteEvent = ReplicatedStorage:FindFirstChildOfClass("RemoteEvent")
-- ฟังผู้เล่นที่เข้ามาและส่งเหตุการณ์ระยะไกลไปยังแต่ละ
local function onPlayerAdded(player)
remoteEvent:FireClient(player,
{
[Workspace.Baseplate] = true
}
)
end
Players.PlayerAdded:Connect(onPlayerAdded)
ส่งฟังก์ชันผ่าน
ฟังก์ชันที่รวมเป็นอาร์กิวเมนต์สําหรับ หรือ จะ ไม่ ถูกสําเนาไปทั่วขอบเขตไคลเอนต์-เซิร์ฟเวอร์ ทำให้ไม่สามารถส่งฟังก์ชันไปยังระยะไกลได้แทนที่จะเป็นอาร์กิวเมนต์ที่ได้รับในด้านรับจะเป็น nil
การเชื่อมต่ออีเวนต์ - สคริปท์ท้องถิ่น
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local remoteEvent = ReplicatedStorage:FindFirstChildOfClass("RemoteEvent")
local function onClientEvent(func)
print(func) --> ไม่มี
end
remoteEvent.OnClientEvent:Connect(onClientEvent)
การยิงอีเวนต์ - สคริปต์
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local remoteEvent = ReplicatedStorage:FindFirstChildOfClass("RemoteEvent")
local function testFunction()
print("Hello world!")
end
-- ส่งอีเวนต์ระยะไกลด้วยฟังก์ชันเป็นอาร์กิวเมนต์
remoteEvent:FireAllClients(testFunction)
การจัดเรียงดัชนีตาราง
หากคุณส่งตารางข้อมูล อย่าส่งตารางผสมของตัวเลขและตัวอักษรที่มีคีย์แทนที่จะส่งโต๊ะที่ประกอบด้วย ทั้งหมด ของคู่คีย์-ค่า (สารานุกรม) หรือ ทั้งหมด ของดัชนีเบอร์
การเชื่อมต่ออีเวนต์ - สคริปต์
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local remoteEvent = ReplicatedStorage:FindFirstChildOfClass("RemoteEvent")
local function onEventFire(player, passedTable)
for k, v in passedTable do
print(k .. " = " .. v)
--> 1 = ดาบ
--> 2 = โบ
--> CharName = นักล่ามังกร Diva
--> CharClass = โจร
end
end
-- เชื่อมฟังก์ชันกับอีเวนต์
remoteEvent.OnServerEvent:Connect(onEventFire)
การยิงอีเวนต์ - สคริปท์ท้องถิ่น
local ReplicatedStorage = game:GetService("ReplicatedStorage")local remoteEvent = ReplicatedStorage:FindFirstChildOfClass("RemoteEvent")-- ตารางที่จัดเรียงตามตัวเลขlocal inventoryData = {"Sword", "Bow"}-- ตารางสารานุกรมlocal characterData = {CharName = "Diva Dragonslayer",CharClass = "Rogue"}remoteEvent:FireServer(inventoryData)remoteEvent:FireServer(characterData)
รหัสตาราง
ตารางที่ส่งเป็นอาร์กิวเมนต์ให้กับอีเวนต์ระยะไกล/คอลเลกชันสามารถคัดลอกได้ ซึ่งหมายความว่าพวกเขาจะไม่เทียบเท่ากับที่ให้ไว้เมื่อยิงอีเวนต์หรือเรียกคอลเลกชันกลับนอกจากนี้ ตารางที่ส่งคืนให้กับผู้ร้องขอจะไม่เท่ากับที่ให้ไว้อย่างแน่นอนคุณสามารถสาธิตสิ่งนี้โดยการดำเนินสคริปต์ต่อไปนี้บน RemoteFunction และสังเกตว่าตัวระบุตารางแตกต่างกันอย่างไร
การเชื่อมต่อการโทรกลับ - สคริปต์
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local remoteFunction = ReplicatedStorage:FindFirstChildOfClass("RemoteFunction")
-- ฟังก์ชันการโทรกลับ
local function returnTable(player, passedTable)
-- อินพุตตาระบุตัวตนบนการเรียกใช้
print(tostring(passedTable)) --> ตาราง: 0x48eb7aead27563d9
return passedTable
end
-- กำหนดฟังก์ชันเป็น callback ของฟังก์ชันระยะไกล
remoteFunction.OnServerInvoke = returnTable
การเรียกกิจกรรม - สคริปท์ท้องถิ่น
local ReplicatedStorage = game:GetService("ReplicatedStorage")local remoteFunction = ReplicatedStorage:FindFirstChildOfClass("RemoteFunction")local inventoryData = {"Sword", "Bow"}-- ออกรหัสตารางเดิมprint(tostring(inventoryData)) --> ตาราง: 0x059bcdbb2b576549local invokeReturn = remoteFunction:InvokeServer(inventoryData)-- ระบุตัวตนของตารางออกเมื่อกลับprint(tostring(invokeReturn)) --> table: 0x9fcae7919563a0e9
ตารางเมตา
หากตารางมี metatable ข้อมูล metatable ทั้งหมดจะหายไปในการโอนในตัวอย่างโค้ดต่อไปนี้ คุณสมบัติ NumWheels เป็นส่วนหนึ่งของตารางเทียบเท่า Carเมื่อเซิร์ฟเวอร์ได้รับตารางต่อไปนี้ ตาราง truck มีคุณสมบัติ Name แต่ ไม่ คุณสมบัติ NumWheels
การเชื่อมต่ออีเวนต์ - สคริปต์
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local remoteEvent = ReplicatedStorage:FindFirstChildOfClass("RemoteEvent")
local function onEvent(player, param)
print(param) --> { ["ชื่อ"] = "MyTruck"}
end
-- เชื่อมฟังก์ชันกับอีเวนต์
remoteEvent.OnServerEvent:Connect(onEvent)
การยิงอีเวนต์ - สคริปท์ท้องถิ่น
local ReplicatedStorage = game:GetService("ReplicatedStorage")local remoteEvent = ReplicatedStorage:FindFirstChildOfClass("RemoteEvent")local Car = {}Car.NumWheels = 4Car.__index = Carlocal truck = {}truck.Name = "MyTruck"setmetatable(truck, Car)-- เหตุการณ์ไฟด้วยตารางที่รวมถึงตารางเมตาเทเบิลremoteEvent:FireServer(truck)
ตัวอย่างที่ไม่ซ้ำกัน
หาก RemoteEvent หรือ RemoteFunction ส่งมูลค่าที่มองเห็นได้เฉพาะผู้ส่งเท่านั้น Roblox จะไม่สร้างซ้ำมันข้ามขอบเขตไคลเอนต์-เซิร์ฟเวอร์และส่ง nil แทนค่าแทนที่แทนค่าตัวอย่างเช่น หาก Script ส่งลูกหลานของ ServerStorage ไปยังไคลเอนต์ที่ฟังเหตุการณ์ ไคลเอนต์จะได้รับค่า nil เพราะวัตถุนั้นไม่สามารถสร้างซ้ำได้สำหรับไคลเอนต์
การยิงอีเวนต์ - สคริปต์
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerStorage = game:GetService("ServerStorage")
local Players = game:GetService("Players")
local remoteEvent = ReplicatedStorage:FindFirstChildOfClass("RemoteEvent")
-- จะได้รับเป็น "ไม่มี" เนื่องจากไคลเอนต์ไม่สามารถเข้าถึง ServerStorage ได้
local storedPart = Instance.new("Part")
storedPart.Parent = ServerStorage
local function onPlayerAdded(player)
remoteEvent:FireClient(player, storedPart)
end
Players.PlayerAdded:Connect(onPlayerAdded)
เช่นเดียวกันหากคุณสร้างส่วนใน LocalScript และพยายามส่งมันไปยัง Script เซิร์ฟเวอร์จะเห็น nil เพราะส่วนไม่สามารถสําเนาได้สําหรับเซิร์ฟเวอร์
การยิงอีเวนต์ - สคริปท์ท้องถิ่น
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Workspace = game:GetService("Workspace")local remoteEvent = ReplicatedStorage:FindFirstChildOfClass("RemoteEvent")-- จะได้รับเป็น "ไม่มี" เพราะเซิร์ฟเวอร์ไม่ทราบเกี่ยวกับส่วนนี้local clientPart = Instance.new("Part")clientPart.Parent = WorkspaceremoteEvent:FireServer(clientPart)