Object
*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่
วัตถุเป็นคลาสพื้นฐานสำหรับทุกคลาสในลำดับชั้นคลาส Robloxทุกคลาสอื่นที่ Roblox Engine กำหนดจะมีสมาชิกทั้งหมดของวัตถุไม่สามารถสร้างวัตถุโดยตรงได้
สรุป
วิธีการ
รับอีเวนต์ที่จะยิงเมื่อคุณสมบัติที่กำหนดของวัตถุเปลี่ยนแปลง
ส่งคืนจริงหากคลาสของวัตถุตรงกับหรือมีมรดกจากคลาสที่กำหนดไว้
อีเวนต์
ไฟไหม้ทันทีหลังจากที่คุณสมบัติของวัตถุเปลี่ยนแปลง, ด้วยข้อจํากัดบางอย่าง
คุณสมบัติ
ClassName
สตริงอ่านเฉพาะที่แทนที่คลาสที่เป็นเจ้าของนี้ Object เป็น
คุณสมบัตินี้สามารถใช้ร่วมกับฟังก์ชันอื่นๆ พิมพ์เช่น Object:IsA() หรือ Instance:FindFirstChildOfClass()
โปรดทราบว่าคุณสมบัตินี้อ่านได้เท่านั้นและไม่สามารถเปลี่ยนแปลงได้โดยสคริปต์นักพัฒนาที่ต้องการเปลี่ยนคลาสของวัตถุจะต้องสร้างใหม่ Object
ไม่เหมือน Object:IsA() , ClassName สามารถใช้เพื่อตรวจสอบว่าวัตถุนั้นเป็นของคลาสเฉพาะหรือไม่โดยไม่สนใจการสืบทอดคลาส ตัวอย่างเช่น:
for _, child in workspace:GetChildren() doif child.ClassName == "Part" thenprint("Found a Part")-- will find Parts in model, but NOT TrussParts, WedgeParts, etcendend
วิธีการ
GetPropertyChangedSignal
วิธีนี้จะคืนเหตุการณ์ที่มีพฤติกรรมเหมือนกับเหตุการณ์ Changed เว้นแต่ว่าจะยิงเฉพาะเมื่อมีการเปลี่ยนแปลงคุณสมบัติที่กำหนดโดยทั่วไปเป็นความคิดที่ดีที่จะใช้วิธีนี้แทนการเชื่อมต่อกับ Changed ด้วยฟังก์ชันที่ตรวจสอบชื่อคุณสมบัติการโทรต่อเนื่องไปยังวิธีนี้บนวัตถุเดียวกันที่มีชื่อคุณสมบัติเดียวกันจะส่งกลับเหตุการณ์เดียวกัน
วัตถุ เช่น และ ใช้อีเวนต์ที่แก้ไขแล้วที่จะยิงด้วยเนื้อหาของคุณสมบัติ ของพวกเขาดังนั้นวิธีนี้จะให้วิธีในการตรวจจับการเปลี่ยนแปลงในคุณสมบัติอื่นๆ ของวัตถุเหล่านั้น
โปรดทราบว่าอีเวนต์นี้จะไม่ส่งอาร์กิวเมนต์ใดๆ ไปยังฟังก์ชันที่เชื่อมต่อ ดังนั้นค่าของคุณสมบัติที่เปลี่ยนแปลงจะต้องอ่านโดยตรงภายในสคริปต์
ข้อจํากัด
อีเวนต์ที่ส่งกลับโดยวิธีนี้ไม่ได้ ไม่ ยิงสำหรับการเปลี่ยนแปลงที่เกี่ยวข้องกับฟิสิกส์ เช่นเมื่อ , , , หรือ คุณสมบัติของการเปลี่ยนแปลงที่เกิดจากแรงโน้มถ่วงเพื่อตรวจจับการเปลี่ยนแปลงในคุณสมบัติเหล่านี้ ให้พิจารณาใช้อีเวนต์ที่ขึ้นอยู่กับฟิสิกส์เช่น RunService.PreSimulation
นอกจากนี้อีเวนต์ที่ส่งกลับอาจไม่เกิดขึ้นในทุกการแก้ไขของคุณสมบัติที่เปลี่ยนบ่อยมาก และ/หรืออาจไม่เกิดขึ้นสำหรับคุณสมบัติดังกล่าวเลยขอแนะนำให้คุณทดสอบอย่างระมัดระวังสำหรับการเปลี่ยนแปลงคุณสมบัติที่มีผลต่อโลจิสติกของเกม
พารามิเตอร์
คุณสมบัติที่จะเชื่อมต่อ
ส่งค่ากลับ
สัญญาณที่จะยิงเมื่อมีการเปลี่ยนแปลงคุณสมบัติ
ตัวอย่างโค้ด
This code sample demonstrates how to save a value before a changed event fires on it in order to get more information about a change.
local part = Instance.new("Part")
local currentColor = part.BrickColor
local function onBrickColorChanged()
local newColor = part.BrickColor
print("Color changed from", currentColor.Name, "to", newColor.Name)
currentColor = newColor
end
part:GetPropertyChangedSignal("BrickColor"):Connect(onBrickColorChanged)
part.BrickColor = BrickColor.new("Really red")
part.BrickColor = BrickColor.new("Really blue")
This code sample demonstrates the equivalence of the Changed event and event returned by GetPropertyChangedSignal.
local part = Instance.new("Part")
local function onBrickColorChanged()
print("My color is now " .. part.BrickColor.Name)
end
local function onChanged(property)
if property == "BrickColor" then
onBrickColorChanged()
end
end
part:GetPropertyChangedSignal("BrickColor"):Connect(onBrickColorChanged)
part.Changed:Connect(onChanged)
-- Trigger some changes (because we connected twice,
-- both of these will cause two calls to onBrickColorChanged)
part.BrickColor = BrickColor.new("Really red")
part.BrickColor = BrickColor.new("Institutional white")
IsA
IsA คืนค่าเป็นจริงหากคลาสของวัตถุเทียบเท่ากับ หรือเป็น ชั้นย่อย ของคลาสที่กำหนดฟังก์ชันนี้คล้ายกับตัวประกอบ ⇒ ในภาษาอื่น ๆ และเป็นรูปแบบของการตรวจสอบประเภท เพื่อเพิกเฉยการสืบทอดคลาส ทดสอบคุณสมบัติ ClassName โดยตรงแทนสำหรับการตรวจสอบประเภทข้อมูล Luau เดิม (จํานวน、สตริง、ฯลฯ) ใช้ฟังก์ชัน type และ typeof
โดยทั่วไปฟังก์ชันนี้จะใช้เพื่อทดสอบว่าวัตถุเป็นส่วนประเภทใด เช่น Part หรือ WedgePart ซึ่งมาจาก BasePart (คลาสที่เป็นนามธรรม)ตัวอย่างเช่น หากเป้าหมายของคุณคือการเปลี่ยนขาของตัวละครทั้งหมดเป็นสีเดียวกันคุณอาจใช้ GetChildren เพื่อตรวจสอบเด็ก จากนั้นใช้ IsA เพื่อกรองวัตถุที่ไม่มีคุณสมบัติ BasePart ซึ่งขาดคุณสมบัติ BrickColor :
local Players = game:GetService("Players")
local function paintFigure(character, color)
-- ทำซ้ำกับวัตถุลูกของตัวละคร
for _, child in character:GetChildren() do
-- กรองวัตถุที่ไม่ใช่ส่วน เช่น เสื้อ กางเกง และมนุษย์
-- R15 ใช้ MeshPart และ R6 ใช้ส่วนดังนั้นเราใช้ BasePart ที่นี่เพื่อตรวจจับทั้งสอง:
if child:IsA("BasePart") then
child.BrickColor = color
end
end
end
paintFigure(Players.Player.Character, BrickColor.new("Bright blue"))
เนื่องจากทุกคลาสมีการมรดกจาก Object ดังนั้นการเรียก object:IsA("Object") จะส่งคืนความจริงเสมอ
พารามิเตอร์
คลาสที่จะตรวจสอบคลาสของวัตถุ โดยแยกกรณีตามตัวอักษร
ส่งค่ากลับ
อธิบายว่าคลาสของวัตถุตรงกันหรือเป็นสายลูกของคลาสที่กำหนดหรือไม่
ตัวอย่างโค้ด
Demonstrates determining the class of Workspace using Instance:IsA()
Workspace is of class 'Workspace', so the first statement is true. Workspace is not of class 'BasePart', so the second statement is false. Workspace inherits from Instance and therefore is of class 'Instance', so the third statement is true.
local Workspace = game:GetService("Workspace")
print(Workspace:IsA("Workspace")) -- true
print(Workspace:IsA("BasePart")) -- false
print(Workspace:IsA("Instance")) -- true
อีเวนต์
Changed
อีเวนต์นี้จะเกิดขึ้นทันทีหลังจากที่คุณสมบัติของวัตถุเปลี่ยนแปลงและทำงานร่วมกับกรณีการใช้งานส่วนใหญ่ (ดูข้อจำกัดด้านล่าง)ค่าใหม่ของคุณสมบัติที่เปลี่ยนแปลงคือ ไม่ ถูกส่งในฐานะพารามิเตอร์ดังนั้นจึงต้องเข้าถึงโดยใช้ object[property]ตัวอย่าง:
object.Changed:Connect(function(property)
print("The new property's value is", object[property])
end)
หากคุณสนใจเฉพาะในการฟังการเปลี่ยนแปลงของคุณสมบัติเฉพาะอย่างใดอย่างหนึ่งเท่านั้น ให้พิจารณาใช้วิธี GetPropertyChangedSignal() แทน
สำหรับวัตถุ ValueBase เช่น IntValue และ StringValue อีเวนต์นี้จะเกิดขึ้นเฉพาะเมื่อมีการเปลี่ยนแปลงคุณสมบัติของวัตถุ Valueเพื่อตรวจจับการเปลี่ยนแปลงอื่นๆ ในวัตถุ ValueBase ให้ใช้ GetPropertyChangedSignal() แทน
ข้อจํากัด
อีเวนต์นี้ไม่ได้ ไม่ได้ ไฟสําหรับการเปลี่ยนแปลงที่เกี่ยวข้องกับฟิสิกส์ เช่น เมื่อ CFrame , AssemblyLinearVelocity , AssemblyAngularVelocity , Position หรือ Orientation คุณสมบัติของการเปลี่ยนแปลง BasePart เนื่องจากแรงโน้มถ่วงเพื่อตรวจจับการเปลี่ยนแปลงในคุณสมบัติเหล่านี้ ให้พิจารณาใช้อีเวนต์ที่ขึ้นอยู่กับฟิสิกส์เช่น RunService.PreSimulation
นอกจากนี้ อีเวนต์นี้อาจไม่เกิดขึ้นทุกครั้งที่มีการเปลี่ยนแปลงคุณสมบัติที่เปลี่ยนบ่อยมาก และ/หรืออาจไม่เกิดขึ้นสำหรับคุณสมบัติดังกล่าวเลยขอแนะนำให้คุณทดสอบอย่างระมัดระวังสำหรับการเปลี่ยนแปลงคุณสมบัติที่มีผลต่อโลจิสติกของเกม
พารามิเตอร์
ชื่อของคุณสมบัติที่เปลี่ยนแปลง
ตัวอย่างโค้ด
This sample demonstrates the subtleties of the Changed event on normal objects and "-Value" objects.
-- Demonstrate the Changed event by creating a Part
local part = Instance.new("Part")
part.Changed:Connect(print)
-- This fires Changed with "Transparency"
part.Transparency = 0.5
-- Similarly, this fires Changed with "Number"
part.Name = "SomePart"
-- Since changing BrickColor will also change other
-- properties at the same time, this line fires Changed
-- with "BrickColor", "Color3" and "Color3uint16".
part.BrickColor = BrickColor.Red()
-- A NumberValue holds a double-precision floating-point number
local vNumber = Instance.new("NumberValue")
vNumber.Changed:Connect(print)
-- This fires Changed with 123.456 (not "Value")
vNumber.Value = 123.456
-- This does not fire Changed
vNumber.Name = "SomeNumber"
-- A StringValue stores one string
local vString = Instance.new("StringValue")
vString.Changed:Connect(print)
-- This fires Changed with "Hello" (not "Value")
vString.Value = "Hello"
This code sample demonstrates the Changed event firing within a parent object.
local object = script.Parent
local function onChanged(property)
-- Get the current value of the property
local value = object[property]
-- Print a message saying what changed
print(object:GetFullName() .. "." .. property .. " (" .. typeof(value) .. ") changed to " .. tostring(value))
end
object.Changed:Connect(onChanged)
-- Trigger a simple change in the object (add an underscore to the name)
object.Name = "_" .. object.Name