อีเวนต์

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

อีเวนต์คือเหตุการณ์ภายในประสบการณ์ของคุณที่คุณสามารถฟังและตอบสนองได้บริการและวัตถุ Roblox จํานวนมากมีกิจกรรมที่ติดตั้งไว้ล่วงหน้าที่จะเรียกใช้อัตโนมัติ ไฟ ในการตอบสนองต่อการกระทําหรือการเปลี่ยนแปลงที่เฉพาะเจาะจง

ตัวอย่างเช่น ผู้เล่น Character สัมผัส BasePart อัตโนมัติจะเรียกการเหตุการณ์ Touchedทุกครั้งที่ผู้เล่นเข้าร่วมประสบการณ์ของคุณ การเหตุการณ์ Players.PlayerAdded จะเกิดขึ้น

เนื่องจากจํานวนเหตุการณ์และสถาปัตยกรรมไคลเอนต์-เซิร์ฟเวอร์ที่มาก การสคริปต์ของ Roblox มักจะเรียกว่า ขับเคลื่อนด้วยเหตุการณ์ วิธีนี้แตกต่างจากเครื่องเกมอื่นๆ จำนวนมากที่เน้นการรันโค้ดบนพื้นฐานของเฟรมต่อเฟรม

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

เชื่อมฟังก์ชันกับอีเวนต์

คุณเชื่อมฟังก์ชันกับอีเวนต์โดยใช้ Connect() เพื่อดําเนินโค้ดในแต่ละครั้งที่อีเวนต์จะเกิดขึ้นเหตุการณ์ส่วนใหญ่ส่งอาร์กิวเมนต์ไปยังฟังก์ชันที่เชื่อมต่อกันตัวอย่างเช่น อีเวนต์ BasePart.Touched ส่งวัตถุที่สัมผัสชิ้นส่วน (เช่นมือซ้ายหรือล้อรถ) และอีเวนต์ Players.PlayerAdded ส่งวัตถุ Player ที่เข้าร่วมประสบการณ์ของคุณ

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีเชื่อมต่อฟังก์ชันชื่อ onPartTouched() กับอีเวนต์ Touched ของส่วน:


-- คาดว่าสคริปต์จะเป็นลูกของส่วน
local part = script.Parent
-- ฟังก์ชันที่คุณต้องการที่จะรัน
local function onPartTouched(object)
print("Part was touched by", object:GetFullName())
end
-- เชื่อมฟังก์ชันกับอีเวนต์ที่สัมผัสของส่วน
part.Touched:Connect(onPartTouched)

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


local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SaveManager = require(ReplicatedStorage:WaitForChild("SaveManager"))
local function saveProgress(character)
local position = character:FindFirstChild("HumanoidRootPart").Position
SaveManager.saveData(character, position)
end
-- ฟังก์ชันไม่ระบุชื่อที่เรียก saveProgress() เมื่อลบตัวละคร
-- จากประสบการณ์ (ในกรณีนี้เมื่อผู้เล่นออก)
Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(saveProgress)
end)

ตัดการเชื่อมต่อฟังก์ชันจากอีเวนต์

วิธี Connect() จะคืนวัตถุ RBXScriptConnectionหากคุณเชื่อมฟังก์ชันกับอีเวนต์ แต่ไม่ต้องการเรียกฟังก์ชันในครั้งต่อไปที่อีเวนต์จะเกิดขึ้น (เช่นหลังจากตรงตามเงื่อนไขบางอย่าง) ให้ถอดการเชื่อมต่อโดยเรียก Disconnect() บนวัตถุ RBXScriptConnection

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีเชื่อมต่อและถอดการเชื่อมต่อฟังก์ชันจากเหตุการณ์ Part.Touched:


local Workspace = game:GetService("Workspace")
local part = Workspace.Part
local targetPart = Workspace.TargetPart
-- ประกาศตัวแปรชั่วคราวว่างเปล่าสำหรับการเชื่อมต่อ
local connection
local function onPartTouched(otherPart)
if otherPart == targetPart then
print("The part hit the target!")
-- แยกการเชื่อมต่อ
connection:Disconnect()
end
end
-- เชื่อมฟังก์ชันด้านบนไปยังอีเวนต์ที่สัมผัส
connection = part.Touched:Connect(onPartTouched)

หากคุณต้องการเชื่อมฟังก์ชันกับอีเวนต์เพียงครั้งเดียวเท่านั้น—นั่นคือเฉพาะทำงานฟังก์ชันในครั้งแรกที่อีเวนต์จะเกิดขึ้น—ใช้วิธี Once() เป็นทางเลือกที่สะดวกกว่าในการเชื่อมต่อและถอดการเชื่อมต่อฟังก์ชัน

รอให้เหตุการณ์เกิดขึ้น

หากต้องการให้สคริปต์ทำงานจนกว่าจะเกิดเหตุการณ์เฉพาะ ให้ใช้วิธี Wait()วิธีนี้จะคืนอาร์กิวเมนต์ของอีเวนต์ซึ่งคุณสามารถกำหนดให้แก่ตัวแปรสำหรับใช้ในภายหลัง:


local Workspace = game:GetService("Workspace")
local part = Workspace.Part
local touchedPart = part.Touched:Wait()
print("The part was touched by", touchedPart:GetFullName())

ประเภทอีเวนต์อื่นๆ

  • อีเวนต์ที่สามารถผูกได้

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

  • อีเวนต์ระยะไกล

    อีเวนต์ระยะไกลช่วยให้คุณสื่อสาร ข้าม ขอบเขตไคลเอนต์-เซิร์ฟเวอร์