เหตุการณ์และคืนค่าที่ผูกได้

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

BindableEvent และ BindableFunction วัตถุที่ให้คุณผูกพฤติกรรมระหว่างสคริปต์ ในด้านเดียวกัน ของเขต 0>เซิร์ฟเวอร์-คลายเคลื่อน0> และสื่อสารผลลัพธ์ที่ต้

การใช้งานที่พบบ่อยที่สุดสำหรับเหตุการณ์ที่ผูกได้คือสำหรับเหตุการณ์ที่มีโครงสร้างรอบ โดยมีเหตุการณ์ "เริ่มต้น" ที่ช่วยให้ผู้อื่นสามารถเริ่มตัวนับเวลาและแสดงตารางอ

เนื่องจากพวกเขาจัดการกิจกรรมระหว่างสคริปต์ดังนั้นเหตุการณ์ที่ผูกได้จึงมักใช้ในเซิร์ฟเวอร์ แต่คุณสามารถใช้ได้บนเครื่องคลังของคุณเช่นกัน

ขึ้นอยู่กับวิธีที่ประสบการณ์ของคุณทำงานได้ผูกได้เหตุการณ์สามารถช่วยให้คุณโค้ดของคุณเป็นแบบโมดูลได้มากขึ้น แต่ สคริปต์โมดูล เป็นตัวเลือกที่ดีกว่าสำ

เหตุการณ์ที่ผูกได้

วัตถุ BindableEvent ช่วยให้เหตุการณ์ที่กำหนดเองผ่านการสื่อสารแบบเหนือกาลเวลาระหว่างสคริปต์

เมื่อคุณยิง BindableEvent ผ่านวิธีการ Fire() จะไม่ได้ผลิตผล และตัวเป้าหมายรับข้อมูลผ่านข้อจํากัดบาง

เพื่อสร้าง BindableEvent ใหม่โดยใช้หน้าต่าง Explorer ใน Studio:

  1. วางเมาส์ในคอนเทนเนอร์ที่คุณต้องการใส่ BindableEvent ใน เราแนะนำให้ใช้ ServerScriptService สำหรับการสื่อสารระหว่างสคริปต์เซิร์ฟเวอร์และ ReplicatedStorage สำหรับการสื่อสารระห
  2. คลิกปุ่ม ที่ปรากฏขึ้นทางด้านขวาของชื่อคอนเทนเนอร์และใส่ อินสแตนซ์BindableEvent 3. เปลี่ยนชื่อตัวอินสแตนซ์เป็น TestBindableEvent

หลังจากที่คุณได้สร้าง BindableEvent แล้ว เชื่อมต่อฟังก์ชันไปยังเหตุการณ์ Event ในสคริปต์เดียวแล้วจากนั้น Class.BindableEvent:Fire()|Fire() เหตุการณ์จากสคริปต์อื่น

การเชื่อมต่อเหตุการณ์

local ServerScriptService = game:GetService("ServerScriptService")
-- อินสแตนซ์
local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")
-- เชื่อมต่อคุณสมบัติที่ไม่ระบุต่อเหตุการณ์
bindableEvent.Event:Connect(function(data)
print(data) --> รอบเริ่มแล้ว!
end)
การเปิดตัวอีเมนต์

local ServerScriptService = game:GetService("ServerScriptService")
-- อินสแตนซ์
local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")
-- กิจกรรมที่ผูกได้
bindableEvent:Fire("Round started!")

การโทรกลับที่กำหนดเอง

วัตถุ BindableFunction ช่วยให้การสื่อสารระหว่างสคริปต์ได้อย่างสิ้นเชิงระหว่างการโทรของสคริปต์ คุณสา

เพื่อสร้าง BindableFunction ใหม่โดยใช้หน้าต่าง Explorer ใน Studio:

  1. วางเมาส์ในคอนเทนเนอร์ที่คุณต้องการใส่ BindableFunction ของคุณ เราแนะนำให้ใช้ ServerScriptService สำหรับการสื่อสารระหว่างสคริปต์เซิร์ฟเวอร์และ ReplicatedStorage สำหรับการสื่อส
  2. คลิกปุ่ม ที่ปรากฏขึ้นทางด้านขวาของชื่อคอนเทนเนอร์และใส่ BindableFunction อินสแตนซ์
  3. เปลี่ยนชื่อตัวอย่างให้เป็น TestBindableFunction

เมื่อคุณสร้าง BindableFunction แล้ว คุณสามารถเชื่อมต่อกับ OnInvoke คอลลีแบ็กของมันในสคริปต์เดียว จากนั้น Invoke() ฟังก์ชันคอลลีจากสคริปต์อื่น

การโทรกลับ

local ServerScriptService = game:GetService("ServerScriptService")
-- รับค่าอ้างอิงไปยัง関数ที่ผูกได้
local bindableFunction = ServerScriptService:WaitForChild("TestBindableFunction")
-- คุณสมบัติการโทรกลับ
local function addTwoNumbers(a, b)
return a + b
end
-- ตั้งค่าฟังก์ชันเป็นคืนของฟังก์ชัน
bindableFunction.OnInvoke = addTwoNumbers
การเรียกอีเวนต์

local ServerScriptService = game:GetService("ServerScriptService")
-- รับค่าอ้างอิงไปยัง関数ที่ผูกได้
local bindableFunction = ServerScriptService:WaitForChild("TestBindableFunction")
-- เรียกใช้งานตัวเรียกและส่งค่ากลับ
local sum = bindableFunction:Invoke(2, 4)
print(sum) --> 6

ข้อจํากัดของตัวอาร์กิวเมนต์

เมื่อคุณยิง BindableEvent หรือเรียก BindableFunction คุณจะส่งอาร์กวิตที่คุณส่งกับเหตุการณ์หรือไปยังคุณสมบัติฟังก์ชัน คุณ

ดัชนีที่ไม่ใช่ตัวอักษร

หากมี ดัชนี ของตารางที่ผ่านมาเป็นของไม่สตริง เช่น Instanceuserdata หรือ 1>ฟังก์ชัน1> โรบ็อกจะแปลงดัชนีเหล่านี้เป็นสตริงโดยอัตโนมัติ

การเชื่อมต่อเหตุการณ์

local ServerScriptService = game:GetService("ServerScriptService")
local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")
local function onEventFire(passedTable)
for k, v in passedTable do
print(typeof(k)) --> สตริง
end
end
-- เชื่อมต่อฟังก์ชันไปยังเหตุการณ์
bindableEvent.Event:Connect(onEventFire)
การเปิดตัวอีเมนต์

local ServerScriptService = game:GetService("ServerScriptService")
local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")
-- คีย์
bindableEvent:Fire({
[workspace.Baseplate] = true
})

การจัดเก็บข้อมูลโต๊ะ

หากคุณผ่านตารางข้อมูล อย่าผ่านตารางผสมของตัวเลขและสตริง แทนที่ด้วยตารางที่ประกอบด้วย ทั้งหมด ของคู่ค่าของคีย์ (พจนานุกรม) หรือ ทั้งหมด ของดัชนี (รายการ)

การเชื่อมต่อเหตุการณ์

local ServerScriptService = game:GetService("ServerScriptService")
local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")
local function onEventFire(passedTable)
for k, v in passedTable do
print(k .. " = " .. v)
--> 1 = ดาบ
--> 2 = โบว์
--> CharName = ผู้ชนะมังกร
--> CharClass = โรค
end
end
-- เชื่อมต่อฟังก์ชันไปยังเหตุการณ์
bindableEvent.Event:Connect(onEventFire)
การเปิดตัวอีเมนต์

local ServerScriptService = game:GetService("ServerScriptService")
local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")
-- ตารางที่มีขนาดเลขาศาสตร์
local inventoryData = {
"Sword", "Bow"
}
-- ตารางพจนานุกรม
local characterData = {
CharName = "Diva Dragonslayer",
CharClass = "Rogue"
}
-- เหตุการณ์ไฟที่มีการจัดเก็บที่สอดคล้องกันของตาราง
bindableEvent:Fire(inventoryData)
bindableEvent:Fire(characterData)

ตัวตรรจุตาราง

ตารางที่ผ่านเป็นตัวอ้างเพื่อผูกกับเหตุการณ์และคืนข้อมูลที่เป็นไปได้จะถูกคัดลอก หมายถึงพวกเขาจะไม่เท่ากับกับสิ่งที่มีอยู่เมื่อยิงเหตุการณ์หรือเรีย

การโทรกลับ

local ServerScriptService = game:GetService("ServerScriptService")
local bindableFunction = ServerScriptService:WaitForChild("TestBindableFunction")
-- คุณสมบัติการโทรกลับ
local function returnTable(passedTable)
-- การสร้างตารางอิงเมื่อเรียก
print(tostring(passedTable)) --> ตาราง: 0x48eb7aead27563d9
return passedTable
end
-- ตั้งค่าฟังก์ชันเป็นคืนของฟังก์ชัน
bindableFunction.OnInvoke = returnTable
การเรียกอีเวนต์

local ServerScriptService = game:GetService("ServerScriptService")
local bindableFunction = ServerScriptService:WaitForChild("TestBindableFunction")
local inventoryData = {
"Sword", "Bow"
}
-- ส่งตัวตรวจสอบตารางฉบับดั้งเดิม
print(tostring(inventoryData)) --> ตาราง: 0x059bcdbb2b576549
local invokeReturn = bindableFunction:Invoke(inventoryData)
-- ออกรหัสตารางเมื่อกลับ
print(tostring(invokeReturn)) --> table: 0x9fcae7919563a0e9

โมเทตาเบิล

หากมีตารางที่มี metatable ทั้งหมดของ metatable ข้อมูลจะหายไปในการโอน ในตัวอย่างโค้ดต่อไปนี้, ค่านิยม NumWheels ส่วนหนึ่ง

การเชื่อมต่อเหตุการณ์

local ServerScriptService = game:GetService("ServerScriptService")
local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")
local function onEvent(param)
print(param) --> { ["ชื่อ"] = "MyTruck"]
end
-- เชื่อมต่อฟังก์ชันไปยังเหตุการณ์
bindableEvent.Event:Connect(onEvent)
การเปิดตัวอีเมนต์

local ServerScriptService = game:GetService("ServerScriptService")
local bindableEvent = ServerScriptService:WaitForChild("TestBindableEvent")
local Car = {}
Car.NumWheels = 4
Car.__index = Car
local truck = {}
truck.Name = "MyTruck"
setmetatable(truck, Car)
-- เหตุการณ์ไฟที่มีตารางรวมถึงตาราง
bindableEvent:Fire(truck)