Instance
*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่
Instance เป็นคลาสระดับฐานสำหรับคลาสทั้งหมดในลำดับชั้นคลาส Roblox ซึ่งสามารถเป็นส่วนหนึ่งของต้นไม้ DataModel
ไม่สามารถสร้างราก Instance วัตถุโดยตรงได้ แต่คอนสตรัคเตอร์พิเศษ Instance.new() สร้างวัตถุผ่านรหัสโดยใช้ชื่อของคลาสเป็นพารามิเตอร์และส่งวัตถุที่สร้างขึ้นกลับ
สรุป
คุณสมบัติ
กำหนดว่า Instance และบรรดาลูกหลานของมันสามารถโคลนได้โดยใช้ Instance:Clone() และสามารถบันทึก/เผยแพร่ได้
ชุดความสามารถที่อนุญาตให้ใช้สำหรับสคริปต์ภายในคอนเทนเนอร์นี้
ตัวระบุไม่ซ้ำกันของ Instance ไม่
กำหนดผู้ปกครองระดับชั้นของ Instance
คุณสมบัติที่ถูกละเลยที่ใช้ป้องกันวัตถุ CoreGui
เปลี่ยนให้ตัวอย่างเป็นคอนเทนเนอร์ที่ถูกกันกั้น
ตัวระบุที่ไม่ซ้ำกันสำหรับตัวอย่าง
วิธีการ
อินสแตนซ์กับตัวอย่าง
ฟังก์ชันนี้ทำลายล้างลูกๆ ของตัวอย่างทั้งหมด
สร้างสำเนาของตัวอย่างและลูกหลานทั้งหมดของมัน โดยไม่สนใจตัวอย่างที่ไม่ใช่ Archivable
ตั้งค่าคุณสมบัติ Instance.Parent เป็น nil ล็อคคุณสมบัติ Instance.Parent ปิดการเชื่อมต่อทั้งหมด และเรียก Destroy() ในทุกเด็ก
คืนบรรพบุรุษคนแรกของ Instance ซึ่ง Instance.Name เท่ากับชื่อที่กำหนด
คืนบรรพบุรุษคนแรกของ Instance ซึ่ง Object.ClassName เท่ากับ className ที่กำหนด
คืนบรรพบุรุษคนแรกของ Instance สำหรับผู้ที่ Object:IsA() ส่งคืนความจริงสำหรับ className ที่กำหนด
ส่งคืนบุตรคนแรกของ Instance ที่พบด้วยชื่อที่กำหนด
คืนเด็กแรกของ Instance ซึ่ง ClassName เท่ากับชื่อคลาสที่กำหนด
คืนเด็กแรกของ Instance สำหรับผู้ที่ Object:IsA() ส่งคืนความจริงสำหรับ className ที่กำหนด
ส่งคืนลูกหลานคนแรกที่พบด้วย Instance.Name ที่กำหนด
คืนค่า Actor ที่เกี่ยวข้องกับตัวอย่างหากมี
คืนค่าที่ได้รับการกำหนดให้กับชื่อคุณสมบัติที่กำหนดไว้
ส่งกลับอีเวนต์ที่จะยิงเมื่อคุณสมบัติที่กำหนดเปลี่ยนแปลง
คืนสารานุกรมของคุณสมบัติของตัวอย่าง
คืนค่าเป็น array อินสแตนซ์
ส่งคืนสตริงที่เข้ารหัสของไอดีการดีบักที่ใช้ภายในโดย Roblox
ส่งคืนคอลเลกชันที่มีลูกหลานทั้งหมดของตัวอย่าง
คืนสตริงที่อธิบายถึงบรรพบุรุษของตัวอย่าง
รับคอลเลกชันของแท็กทั้งหมดที่ใช้กับตัวอย่างของอินสแตนซ์
ตรวจสอบว่าตัวอย่างมีแท็กที่กำหนดหรือไม่
ส่งคืนจริงหาก Instance เป็นบรรพบุรุษของทายาทที่กำหนด
ส่งคืน true หาก Instance เป็นลูกหลานของบรรพบุรุษที่กำหนด
ส่งคืน true หากมูลค่าที่เก็บไว้ในคุณสมบัติที่ระบุเป็นไม่เป็นค่าเริ่มต้น
ลบแท็กออกจากตัวอย่าง
ตั้งค่าคุณสมบัติด้วยชื่อที่กำหนดให้เป็นค่าที่กำหนดไว้
คืนบุตรของ Instance ด้วยชื่อที่กำหนด หากบุตรไม่มีอยู่จะให้เส้นทางกระบวนการปัจจุบันจนกว่าจะมี
อีเวนต์
ไฟเมื่อคุณสมบัติ Instance.Parent ของวัตถุหรือหนึ่งในบรรพบุรุษเปลี่ยนแปลง
ไฟไหม้เมื่อคุณสมบัติถูกเปลี่ยนบน Instance ทุกครั้ง
ไฟไหม้หลังจากที่วัตถุถูกผูกกับสิ่งนี้ Instance
ไฟไหม้หลังจากที่เด็กถูกลบออกจากสิ่งนี้ Instance
ไฟไหม้หลังจากที่มีการเพิ่มลูกหลานลงใน Instance
ไฟไหม้ทันทีก่อนที่จะลบสายตระกูลของ Instance จะถูกลบออก
ไฟไหม้ทันทีก่อน (หรือถูกเลื่อนออกไปจนกว่าจะมีการทําลายตัวอย่างผ่าน Instance:Destroy() )
คุณสมบัติ
Archivable
คุณสมบัตินี้กำหนดว่าควรรวมตัวอย่างในเมื่อประสบการณ์ถูกเผยแพร่หรือบันทึก หรือเมื่อ Clone() ถูกเรียกใช้บนบรรพบุรุษของตัวอย่างหนึ่งการเรียก Clone() โดยตรงบนตัวอย่างจะส่งคืน nil หากตัวอย่างนั้นไม่ใช่ ไม่ใช่ Archivable
การคัดลอกวัตถุใน Studio โดยใช้ตัวเลือก ซ้ำ หรือ คัดลอก / วาง จะเพิกเฉยคุณสมบัติของตัวเอง Archivable และตั้ง Archivable เป็น true สำหรับการคัดลอก
local part = Instance.new("Part")print(part:Clone()) --> Partpart.Archivable = falseprint(part:Clone()) --> nil
Capabilities
อินสแตนซ์Instance.Sandboxed คุณสมบัติจะต้องเปิดใช้งาน
คุณสมบัตินี้ถูกใช้โดยคุณลักษณะทดลอง ดู ความสามารถของสคริปต์ สำหรับรายละเอียดเพิ่มเติม
Name
ตัวระบุไม่ซ้ำกันของ Instance ไม่ชื่อใช้เพื่อให้โครงสร้างของวัตถุเป็นระเบียบ พร้อมกับอนุญาตให้สคริปต์เข้าถึงวัตถุเฉพาะชื่อของตัวอย่างไม่สามารถเกิน 100 ตัวอักษรในขนาดได้
ชื่อของวัตถุมักใช้เพื่อเข้าถึงวัตถุผ่านลำดับของรูปแบบข้อมูลโดยใช้วิธีต่อไปนี้:
local Workspace = game:GetService("Workspace")local baseplate = Workspace.Baseplatelocal baseplate = Workspace["Baseplate"]local baseplate = Workspace:FindFirstChild("BasePlate")
เพื่อให้วัตถุสามารถเข้าถึงได้โดยใช้เครื่องหมายจุลภาค ( . ) ชื่อของมันต้องเริ่มด้วยเครื่องหมายขีดเส้นใต้หรือตัวอักษร และส่วนที่เหลือของชื่อสามารถมีเฉพาะตัวอักษร ตัวเลข หรือเครื่องหมายขีดเส้นใต้ (ไม่มีตัวอักษรพิเศษอื่น ๆ)หากชื่อของวัตถุไม่ปฏิบัติตามสังคณะนี้ จะไม่สามารถเข้าถึงได้โดยใช้ตัวเลข dot และ Luau จะไม่ตีความชื่อของมันเป็นตัวระบุ
หากมีมากกว่าหนึ่งวัตถุที่มีชื่อเดียวกันเป็นพี่น้อง การพยายามจัดเรียงวัตถุโดยชื่อนั้นจะคืนเพียงหนึ่งในวัตถุเท่านั้น คล้ายกับ Instance:FindFirstChild() แต่ไม่เสมอไปตามที่ต้องการหากต้องเข้าถึงวัตถุเฉพาะผ่านรหัส แนะนำให้ให้ชื่อที่ไม่ซ้ำกันหรือรับประกันว่าพี่น้องคนใดคนหนึ่งไม่มีชื่อเดียวกัน
ดูเพิ่มเติม Instance:GetFullName() เพื่อรับชื่อเต็มรวมถึงลำดับชั้นของวัตถุ
Parent
คุณสมบัติ Parent กำหนดผู้ปกครองระดับสูงของ Instanceคำศัพท์ต่อไปนี้มักใช้เมื่อพูดถึงวิธีการตั้งค่าคุณสมบัตินี้:
วัตถุเป็นลูก ของ หรือเป็น พ่อแม่ ของวัตถุอื่นเมื่อ Parent ของมันถูกตั้งค่าเป็นวัตถุนั้น
บุตรหลานของ **** ของ an Instance คือบุตรหลานของวัตถุนั้น, บวกกับบุตรหลานของบุตรหลานด้วย
บรรพบุรุษ ของ ของตัวอย่างทั้งหมดคือวัตถุทั้งหมดที่ตัวอย่างเป็นลูกหลาน
มาจากคุณสมบัติ Parent ที่สมาชิก API อื่นๆ หลายคนได้รับชื่อของพวกเขา, เช่น GetChildren() และ FindFirstChild()คุณสมบัตินี้ยังใช้เพื่อจัดการว่าวัตถุมีอยู่ในประสบการณ์หรือจำเป็นต้องลบออกตราบใดที่พ่อของวัตถุอยู่ใน DataModel จะถูกเก็บไว้ในตัวแปรหรือได้รับการอ้างอิงโดยคุณสมบัติของวัตถุอื่นก็จะยังคงอยู่ในประสบการณ์; มิฉะนั้นวัตถุจะถูกลบออกโดยอัตโนมัติ
การเรียก จะตั้ง ของ และทั้งหมดของลูกหลานของมันเป็น และยัง ล็อค คุณสมบัติเกิดข้อผิดพลาดเมื่อตั้งค่า Parent ของวัตถุที่ถูกทําลาย
วัตถุที่สร้างใหม่โดยใช้ Instance.new() จะไม่มีพ่อแม่ และมักจะไม่ปรากฏหรือทำงานจนกว่าจะตั้งค่าแล้ว
การสําเนาวัตถุ
วัตถุที่สร้างโดยเซิร์ฟเวอร์จะไม่ถูกสร้างซ้ำให้กับลูกค้าจนกว่าจะถูกผูกกับวัตถุที่ถูกสร้างซ้ำเมื่อสร้างวัตถุและกำหนดค่าสมบัติจำนวนมาก แนะนำให้ตั้งค่าคุณสมบัติ Parent ล่าสุด **** ซึ่งช่วยให้วัตถุสามารถสําเนาได้เพียงครั้งเดียว แทนที่จะสําเนาการเปลี่ยนแปลงคุณสมบัติจํานวนมาก
local Workspace = game:GetService("Workspace")-- อินสแตนซ์(แนะนำ)local part = Instance.new("Part")part.Position = Vector3.new(0, 10, 0)part.Parent = Workspace
อย่างไรก็ตาม หากส่วนที่เป็นพ่อเลี้ยงไปยัง Model ผู้ปกครองยังไม่ได้ตั้งค่าไว้ การเลี้ยงแต่ละส่วนไปยังโมเดลนั้นยอมรับได้เนื่องจากโมเดลจะไม่ได้ถูกเลียนแบบ
RobloxLocked
คุณสมบัตินี้ใช้ป้องกันวัตถุในบริการ CoreGui จากการถูกแก้ไขโดยผู้ใช้ในลักษณะที่ไม่ได้รับอนุญาตมันถูกยกเลิกและไม่ทำอะไรเลย
Sandboxed
เปลี่ยนให้ตัวอย่างเป็น คอนเทนเนอร์ที่ถูกกันออก ซึ่งเป็นคุณลักษณะทดลองที่จำกัดการดำเนินการที่สคริปต์ภายในคอนเทนเนอร์เฉพาะสามารถดำเนินการได้ดู ความสามารถของสคริปต์ สำหรับรายละเอียดเพิ่มเติม
วิธีการ
AddTag
วิธีนี้ใช้แท็กกับตัวอย่างโดยไม่มีผลหากแท็กถูกใช้แล้วการเพิ่มแท็กสําเร็จจะส่งสัญญาณที่สร้างขึ้นโดย CollectionService:GetInstanceAddedSignal() ด้วยแท็กที่กำหนดไว้
คําเตือน
แท็กของตัวอย่างที่ถูกเพิ่มบนเครื่องคอมพิวเตอร์จะถูกลบหากเซิร์ฟเวอร์เพิ่มหรือลบแท็กบนตัวอย่างนั้นในภายหลังเพราะเซิร์ฟเวอร์สำเนาทั้งหมดแท็กและเขียนทับแท็กก่อนหน้า
อินสแตนซ์มันเป็นเรื่องธรรมดาที่ทรัพยากรบางอย่างจะถูกใช้เพื่อให้ป้ายกำกับมีฟังก์ชัน เช่น การเชื่อมต่อกิจกรรมหรือตารางเพื่อป้องกันการรั่วไหลของหน่วยความจํา เป็นความคิดที่ดีที่จะทําความสะอาดพวกเขา (ตัดการเชื่อมต่อ, ตั้งค่าเป็น nil เป็นต้น) เมื่อไม่จําเป็นต้องใช้แท็กอีกต่อไปทำเช่นนี้เมื่อเรียก Instance:RemoveTag() , เรียก Instance:Destroy() หรือในฟังก์ชันที่เชื่อมต่อกับสัญญาณที่ส่งคืนโดย CollectionService:GetInstanceRemovedSignal()
พารามิเตอร์
ส่งค่ากลับ
ClearAllChildren
ฟังก์ชันนี้ทำลายล้างบุตรและหลานของตัวอย่างทั้งหมด
หากคุณไม่ต้องการทําลาย ทั้งหมด เด็กและหลาน ให้ใช้ Instance:GetChildren() หรือ Instance:GetDescendants() เพื่อเล่นผ่านเด็ก/หลานเหล่านั้นและเลือกสิ่งที่จะทําลายตัวอย่างโค้ดต่อไปนี้จะทำลายทั้งหมด BaseParts ลงจาก Model :
local Workspace = game:GetService("Workspace")local model = Workspace:FindFirstChild("TestModel")for _, descendant in model:GetDescendants() doif descendant:IsA("BasePart") thendescendant:Destroy()endend
ส่งค่ากลับ
ตัวอย่างโค้ด
This example creates a Part and adds a few sparkle objects to the part. Then it calls Part:ClearAllChildren() to remove all of the children.
local part = Instance.new("Part")
-- add some sparkles
for _ = 1, 3 do
local sparkles = Instance.new("Sparkles")
sparkles.Parent = part
end
print("Part has", #part:GetChildren(), "children")
--> Part has 3 children
part:ClearAllChildren()
print("Part has", #part:GetChildren(), "children")
--> Part has 0 children
Clone
Clone() สร้างสำเนาของตัวอย่างและลูกหลานทั้งหมดของมัน โดยไม่สนใจตัวอย่างทั้งหมดที่ไม่ใช่ Archivableสำเนาของตัวอย่างรากถูกส่งคืนโดยวิธีนี้และ Parent ของมันถูกตั้งค่าเป็น nilโปรดทราบว่าหากตัวอย่างเองมี Archivable ตั้งค่าเป็น false ฟังก์ชันนี้จะส่งคืน nil
หากคุณสมบัติอ้างอิงเช่น ObjectValue.Value อินสแตนซ์ค่าของคุณสมบัติของสำเนาจะขึ้นอยู่กับค่าของต้นฉบับ:
- หากคุณสมบัติอ้างอิงอ้างถึงตัวอย่างที่ถูกโคลน เช่นกัน คัดลอกจะอ้างถึงคัดลอก
- หากคุณสมบัติอ้างอิงอ้างถึงวัตถุที่ไม่ได้ถูกโคลน ไม่ ค่าเดียวกันจะถูกรักษาไว้ในการคัดลอก
ส่งค่ากลับ
ตัวอย่างโค้ด
Demonstrates cloning a model using Instance:Clone().
local Workspace = game:GetService("Workspace")
-- Get a reference to an existing object
local model = script.Parent.Model
-- Create a clone of the model
local clone = model:Clone()
-- Move the clone so it's not overlapping the original model
clone:PivotTo(model.PrimaryPart.CFrame - (Vector3.xAxis * 10))
-- Add the clone to the Workspace
clone.Parent = Workspace
Destroy
ตั้งค่าคุณสมบัติ Instance.Parent เป็น nil ล็อคคุณสมบัติ Instance.Parent ปิดการเชื่อมต่อทั้งหมด และเรียก Destroy() ในทุกเด็กฟังก์ชันนี้เป็นวิธีที่ถูกต้องในการทิ้งวัตถุที่ไม่จำเป็นอีกต่อไป
การทิ้งวัตถุที่ไม่จำเป็นเป็นสิ่งสำคัญ เนื่องจากวัตถุและการเชื่อมต่อที่ไม่จำเป็นในสถานที่ใช้หน่วยความจำที่สามารถนำไปสู่ปัญหาประสิทธิภาพที่ร้ายแรงในระยะเวลานาน
ในฐานะที่เป็นการปฏิบัติที่ดีที่สุดหลังจากเรียก Destroy() บนวัตถุ ให้ตั้งแปรใดๆ ที่อ้างอิงถึงวัตถุ (หรือบรรดาลูกหลานของมัน) เป็น nilสิ่งนี้ป้องกันไม่ให้โค้ดของคุณเข้าถึงสิ่งที่เกี่ยวข้องกับวัตถุ
local part = Instance.new("Part")part.Name = "Hello, world"part:Destroy()-- อย่าทําสิ่งนี้:print(part.Name) --> "สวัสดีโลก"-- ทำเช่นนี้เพื่อป้องกันไม่ให้บรรทัดด้านบนทำงาน:part = nil
เมื่อ Instance ถูกทําลายโดยวิธีนี้แล้ว จะไม่สามารถใช้ซ้ำได้เพราะคุณสมบัติ Instance.Parent ถูกล็อคเพื่อ ชั่วคราว ลบวัตถุแทนที่จะทำลายมัน, ตั้ง Parent เป็น nilตัวอย่าง:
local Workspace = game:GetService("Workspace")object.Parent = niltask.wait(2)object.Parent = Workspace
เพื่อทําลายวัตถุหลังจากระยะเวลาที่กําหนดใช้ Debris:AddItem()
ส่งค่ากลับ
ตัวอย่างโค้ด
Demonstrates destroying a Part using the Instance:Destroy() function.
This function is the correct way to dispose of objects that are no longer required.
local part = script.Parent.Part
part:Destroy()
FindFirstAncestor
คืนบรรพบุรุษคนแรกของ Instance ซึ่ง Instance.Name เท่ากับชื่อที่กำหนด
ฟังก์ชันนี้ทำงานขึ้นไป อินสแตนซ์Instance.Parent และทำงานไปที่ DataModelหากไม่พบบรรพบุรุษที่ตรงกัน มันจะคืน nil
ส่วนตัดต่อโค้ดต่อไปนี้จะค้นหาบรรพบุรุษแรกของวัตถุที่ชื่อ Car
local car = object:FindFirstAncestor("Car")
สำหรับตัวแปรของฟังก์ชันนี้ที่ค้นหาบรรพบุรุษของคลาสเฉพาะ โปรดดู Instance:FindFirstAncestorOfClass() และ Instance:FindFirstAncestorWhichIsA()
พารามิเตอร์
The Instance.Name ที่จะมองหา
ส่งค่ากลับ
FindFirstAncestorOfClass
คืนบรรพบุรุษคนแรกของ Instance ซึ่ง Object.ClassName เท่ากับ className ที่กำหนด
ฟังก์ชันนี้ทำงานขึ้นไป อินสแตนซ์Instance.Parent และทำงานไปที่ DataModelหากไม่พบบรรพบุรุษที่ตรงกัน มันจะคืน nil
การใช้งานทั่วไปของฟังก์ชันนี้คือการค้นหา Model ที่เป็นของ BasePart ตัวอย่างเช่น:
local model = part:FindFirstAncestorOfClass("Model")
ฟังก์ชันนี้เป็นตัวแปรของ Instance:FindFirstAncestor() ซึ่งตรวจสอบคุณสมบัติ Object.ClassName แทนที่จะเป็น Class.Instance.Name``Class.Instance:FindFirstAncestorWhichIsA() ยังมีอยู่เช่นกันโดยใช้วิธีการ Object:IsA() แทนที่จะเคารพการสืบทอดคลาส
พารามิเตอร์
The Object.ClassName ที่จะมองหา
ส่งค่ากลับ
FindFirstAncestorWhichIsA
คืนบรรพบุรุษคนแรกของ Instance สำหรับผู้ที่ Object:IsA() ส่งคืนความจริงสำหรับ className ที่กำหนด
ฟังก์ชันนี้ทำงานขึ้นไป อินสแตนซ์Instance.Parent และทำงานไปที่ DataModelหากไม่พบบรรพบุรุษที่ตรงกัน มันจะคืน nil
ไม่เหมือนกับ Instance:FindFirstAncestorOfClass() ฟังก์ชันนี้ใช้ Object:IsA() ซึ่งเคารพการสืบทอดคลาส ตัวอย่างเช่น:
print(part:IsA("Part")) --> trueprint(part:IsA("BasePart")) --> trueprint(part:IsA("Instance")) --> true
ดังนั้นตัวอย่างโค้ดต่อไปนี้จะคืนบรรพบุรุษแรก BasePart ไม่ว่าจะเป็น WedgePart หรือ MeshPart หรือ Part ก็ตาม
local part = object:FindFirstAncestorWhichIsA("BasePart")
ดูเพิ่มเติม Instance:FindFirstAncestor() .
พารามิเตอร์
The Object.ClassName ที่จะมองหา
ส่งค่ากลับ
FindFirstChild
ส่งคืนบุตรคนแรกของ Instance ด้วยชื่อที่กำหนด หรือ nil หากไม่มีบุตรดังกล่าวหากอาร์กิวเมนต์ตัวเลือก recursive ไม่บังคับเป็น true ฟังก์ชันนี้จะค้นหาลูกหลานทั้งหมดแทนที่จะเป็นเฉพาะบุตรชายที่ใกล้เคียงของ Instance
ตรวจสอบการมีอยู่ของวัตถุ
FindFirstChild() จำเป็นหากคุณต้องการตรวจสอบว่ามีวัตถุอยู่ก่อนที่จะดำเนินการต่อพยายามที่จะดัชนีลูกโดยใช้ตัวเลขจุดเกิดข้อผิดพลาดหากลูกไม่มีอยู่
local Workspace = game:GetService("Workspace")-- ข้อผิดพลาดในบรรทัดต่อไปหากส่วนไม่มีอยู่ในพื้นที่ทำงานWorkspace.Part.Transparency = 0.5
ใช้ FindFirstChild() เพื่อตรวจสอบก่อน Part จากนั้นใช้คำสั่ง if เพื่อรันโค้ดที่ต้องการ
local Workspace = game:GetService("Workspace")local part = Workspace:FindFirstChild("Part")if part thenpart.Transparency = 0.5end
ค้นหาเด็กที่ชื่อตรงกับคุณสมบัติ
บางครั้ง Name ของวัตถุเป็นเหมือนกับของคุณสมบัติของมัน Parentเมื่อใช้ตัวประกอบจุด, คุณสมบัติจะมีลําดับความสําคัญมากกว่าเด็กถ้าพวกเขาแชร์ชื่อ
ในตัวอย่างต่อไปนี้ Folder ที่เรียกว่า "สี" จะถูกเพิ่มลงใน Part ซึ่งยังมีคุณสมบัติ Class.Part.Color``Class.Part.Color หมายถึง Color3 ไม่ใช่โฟลเดอร์
local part = Instance.new("Part")local folder = Instance.new("Folder")folder.Name = "Color"folder.Parent = partlocal c = part.Color --> สี 3local c2 = part:FindFirstChild("Color") --> The Folder
ประโยชน์ของการใช้ FindFirstChild() รหัส
บันทึกประสิทธิภาพ
FindFirstChild() ใช้เวลาประมาณ 20% นานกว่าการใช้ตัวประกอบจุลภาคและเกือบ 8 เท่านานกว่าการเก็บอ้างอิงถึงวัตถุโดยตรงดังนั้นคุณควรหลีกเลี่ยงการเรียกใช้ในรหัสที่ขึ้นอยู่กับประสิทธิภาพเช่นในลูปแคบหรือฟังก์ชันที่เชื่อมโยงกับ RunService.Heartbeat และ RunService.PreRenderแทนที่จะเก็บผลลัพธ์ในตัวแปรหรือพิจารณาการใช้ ChildAdded หรือ WaitForChild() เพื่อตรวจสอบเมื่อบุตรของชื่อที่กำหนดเป็นที่มีอยู่
พารามิเตอร์
The Instance.Name ที่จะค้นหา
ว่าการค้นหาควรจะดำเนินการอย่างไร้ที่ติดตามหรือไม่
ส่งค่ากลับ
ตัวอย่างโค้ด
The below would look in Workspace for an object name "Brick". If found, it will change the name of the object to "Foo".
local found = workspace:FindFirstChild("Brick")
if found then
found.Name = "Foo"
end
FindFirstChildOfClass
คืนเด็กแรกของ Instance ซึ่ง ClassName เท่ากับที่กำหนด classNameไม่เหมือนกับ Instance:FindFirstChildWhichIsA() ฟังก์ชันนี้จะคืนวัตถุที่มีคลาสตรงกับ className โดยไม่สนใจการสืบทอดคลาสหากไม่พบเด็กที่ตรงกัน ฟังก์ชันนี้จะคืน nil
พารามิเตอร์
The Object.ClassName ที่จะมองหา
ส่งค่ากลับ
ตัวอย่างโค้ด
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid
while not humanoid do
humanoid = character:FindFirstChildOfClass("Humanoid")
if not humanoid then
character.ChildAdded:Wait()
end
end
FindFirstChildWhichIsA
คืนเด็กแรกของ Instance สำหรับผู้ที่ Object:IsA() ส่งคืนความจริงสำหรับ className ที่กำหนด
หากไม่พบเด็กที่ตรงกัน ฟังก์ชันนี้จะคืน nilหากอาร์กิวเมนต์ทางเลือกที่เป็นทฤษฎีเป็นจริง, ฟังก์ชันนี้จะค้นหาลูกหลานทั้งหมดแทนที่จะเป็นเพียงบุตรหลานโดยตรงของ Instance
ไม่เหมือนกับ Instance:FindFirstChildOfClass() ฟังก์ชันนี้ใช้ Object:IsA() ซึ่งเคารพการสืบทอดคลาส ตัวอย่างเช่น:
print(part:IsA("Part")) --> จริงprint(part:IsA("BasePart")) --> จริงprint(part:IsA("Instance")) --> true
ดังนั้นตัวอย่างโค้ดต่อไปนี้จะคืนเด็กแรก BasePart ไม่ว่าจะเป็น WedgePart หรือ MeshPart หรือ Part ก็ตาม
local part = object:FindFirstChildWhichIsA("BasePart")
นักพัฒนาที่กำลังมองหาเด็กโดยใช้ชื่อควรใช้ Instance:FindFirstChild() แทน
พารามิเตอร์
The Object.ClassName ที่จะค้นหา
ว่าการค้นหาควรจะดำเนินการอย่างไร้ที่ติดตามหรือไม่
ส่งค่ากลับ
FindFirstDescendant
ส่งคืนลูกหลานคนแรกที่พบด้วย Instance.Name ที่กำหนด
วิธีนี้ถูกปิดใช้งานและไม่สามารถใช้งานได้เพื่อค้นหาบุตรชายคนแรกของตัวอย่าง พิจารณาใช้พารามิเตอร์ recursive บน Instance:FindFirstChild() แทน
พารามิเตอร์
The Instance.Name ที่จะค้นหา
ส่งค่ากลับ
GetActor
หาก Instance เป็น Actor ก็จะส่งคืน Actor เองมิฉะนั้นจะส่งคืนบรรพบุรุษที่ใกล้ที่สุด Actorหากไม่มีบรรพบุรุษเป็น Actor ผลลัพธ์คือ nil
ส่งค่ากลับ
GetAttribute
วิธีนี้จะคืนค่าที่ได้รับการกำหนดให้กับชื่อคุณสมบัติที่กำหนด หากไม่มีคุณสมบัติถูกกำหนด จะถูกคืน nil
ตัวอย่างเช่น ชิ้นส่วนโค้ดต่อไปนี้ตั้งและแล้วได้รับค่าของคุณสมบัติของตัวอย่าง InitialPosition ของอินสแตนซ์:
local Workspace = game:GetService("Workspace")local part = Workspace.Partpart:SetAttribute("InitialPosition", part.Position)local initialPosition = instance:GetAttribute("InitialPosition")print(initialPosition)
ดูเพิ่มเติม
- Instance:SetAttribute() ซึ่งตั้งค่าคุณสมบัติด้วยชื่อที่กำหนดให้เป็นค่าที่กำหนด
- Instance:GetAttributes() อินสแตนซ์
พารามิเตอร์
ชื่อของคุณสมบัติที่กำลังดึงมา
ส่งค่ากลับ
มูลค่าที่ได้รับการกำหนดให้กับชื่อคุณสมบัติที่กำหนด หากไม่มีคุณสมบัติถูกกำหนด nil จะถูกส่งคืน
GetAttributeChangedSignal
ฟังก์ชันนี้ส่งกลับเหตุการณ์ที่มีพฤติกรรมเหมือนกับเหตุการณ์ Changed ยกเว้นว่ามันจะยิงเฉพาะเมื่อมีการเปลี่ยนแปลงคุณสมบัติที่กำหนดเอง; มีประสิทธิภาพคล้ายกับ GetPropertyChangedSignal() แต่สำหรับคุณสมบัติ
โดยทั่วไปเป็นความคิดที่ดีที่จะใช้วิธีนี้แทนการเชื่อมต่อกับ Changed ด้วยฟังก์ชันที่ตรวจสอบชื่อคุณลักษณะการโทรต่อเนื่องไปยังวิธีนี้บนวัตถุเดียวกันด้วยชื่อคุณสมบัติเดียวกันจะส่งกลับเหตุการณ์เดียวกัน
ตัวอย่างโค้ดต่อไปนี้จะส่งสัญญาณที่เปิดใช้งานฟังก์ชัน attributeChanged() เมื่อคุณสมบัติส่วน InitialPosition เปลี่ยนแปลง:
local Workspace = game:GetService("Workspace")
local part = Workspace.Part
part:SetAttribute("InitialPosition", part.Position)
local function attributeChanged()
print("Attribute changed")
end
part:GetAttributeChangedSignal("InitialPosition"):Connect(attributeChanged)
อินสแตนซ์Instance.AttributeChanged ซึ่งจะเรียกใช้เมื่อมีการเปลี่ยนแปลงคุณลักษณะใดๆ บนตัวอย่าง
พารามิเตอร์
ชื่อของคุณสมบัติที่ระบุซึ่งสัญญาณการเปลี่ยนแปลงถูกส่งกลับ
ส่งค่ากลับ
อีเวนต์ที่จะยิงเมื่อคุณสมบัติที่กำหนดเปลี่ยนแปลง
GetAttributes
วิธีนี้จะคืนสารบัญของคู่คีย์-ค่าสำหรับแต่ละคุณสมบัติที่คีย์เป็นชื่อคุณสมบัติและมูลค่าเป็นมูลค่าที่ไม่ nil
ตัวอย่างเช่น ชิ้นส่วนโค้ดต่อไปนี้จะแสดงคุณสมบัติและค่าของตัวอย่างของอินสแตนซ์:
local Workspace = game:GetService("Workspace")local part = Workspace.Partpart:SetAttribute("InitialPosition", part.Position)part:SetAttribute("CanUse", true)for name, value in part:GetAttributes() doprint(name .. " = " .. value)end
ดูเพิ่มเติม Instance:GetAttribute() ซึ่งจะคืนค่าที่ได้รับการกำหนดให้กับชื่อคุณสมบัติที่กำหนดไว้
ส่งค่ากลับ
สารานุกรมของคู่สตริง → คู่สำหรับแต่ละคุณสมบัติที่สตริงเป็นชื่อของคุณสมบัติและตัวแปรเป็นค่าที่ไม่เป็นศูนย์
GetChildren
ส่งคืนคอลเลกชัน (อินสแตนซ์) ที่มีลูกโดยตรงของตัวอย่างทั้งหมดหรือทุก Instance ที่มี Parent เท่ากับวัตถุสามารถตรวจสอบอาร์เรย์ได้โดยใช้ลูป for ที่เป็นตัวเลขหรือทั่วไป:
local Workspace = game:GetService("Workspace")-- ตัวอย่างลูปเลขหนึ่งlocal children = Workspace:GetChildren()for i = 1, #children dolocal child = children[i]print(child.Name .. " is child number " .. i)end
local Workspace = game:GetService("Workspace")-- ตัวอย่างลูปทั่วไปlocal children = Workspace:GetChildren()for i, child in children doprint(child.Name .. " is child number " .. i)end
เด็กจะถูกจัดเรียงตามลําดับที่คุณสมบัติ Parent ของพวกเขาถูกตั้งค่าให้เป็นวัตถุ
ดูฟังก์ชัน GetDescendants ด้วย
ส่งค่ากลับ
คอลเลกชันที่มีลูกของตัวอย่าง ของอินสแตนซ์
ตัวอย่างโค้ด
The below would print the name of all objects currently in Workspace when ran.
local children = workspace:GetChildren()
for i = 1, #children do
print(i, children[i].Name)
end
GetDebugId
ส่งคืนสตริงรหัสของไอดีการดีบักที่ใช้ภายในโดย Roblox โปรดทราบว่า:
- รายการนี้ได้รับการคุ้มครอง การพยายามใช้งานใน Script หรือ LocalScript จะทําให้เกิดข้อผิดพลาด
- รหัสดีบักเป็นรหัสที่ใช้ในกระบวนการดีบักมันช่วยให้นักพัฒนาสามารถอ่านคำสั่งแต่ละคำสั่งก่อนที่จะประมวลผลโดยแอปพลิเคชันวัตถุทั้งหมดใน Roblox ทำงานเหมือนกระบวนการและคำสั่งแต่ละรอบ (หรือ 'โค้ด') ที่สามารถแก้ไขข้อผิดพลาดได้หากจำเป็น
- นี่อาจเป็นประโยชน์สำหรับปลั๊กอินที่ต้องแยกวัตถุที่คล้ายกันออกจากกัน (เช่นวัตถุที่มีชื่อเดียวกัน)
พารามิเตอร์
ความยาวของขอบเขต
ส่งค่ากลับ
สตริงไอดีการดีบัก
ตัวอย่างโค้ด
print(workspace:GetDebugId()) --> 39FA_12
print(workspace:GetDebugId(10)) --> 39FA2FEF4D_12
print(workspace:GetDebugId(math.huge)) --> 12
GetDescendants
วิธีนี้ของวัตถุจะส่งคืนคอลเลกชันที่มีลูกหลานทั้งหมดของวัตถุนั้นไม่เหมือนกับ Instance:GetChildren() ซึ่งจะคืนเฉพาะบุตรโดยตรงของวัตถุเท่านั้น วิธีนี้จะค้นหาทุกบุตรของวัตถุ ทุกบุตรของบุตรเหล่านั้น และอื่นๆ
ส่งค่ากลับ
คอลเลกชันที่มีลูกหลานของตัวอย่าง ของอินสแตนซ์
ตัวอย่างโค้ด
GetDescendants is often used to do something to all the descendants that are a particular type of object. The code in this example uses GetDescendants and Instance:IsA() to find all of the parts in the workspace and turns them green.
local descendants = workspace:GetDescendants()
-- Loop through all of the descendants of the Workspace. If a
-- BasePart is found, the code changes that parts color to green
for _, descendant in pairs(descendants) do
if descendant:IsA("BasePart") then
descendant.BrickColor = BrickColor.Green()
end
end
GetFullName
คืนสตริงที่อธิบายถึงบรรพบุรุษของตัวอย่างสตริงเป็นการรวมกันของ Name ของวัตถุและบรรพบุรุษของมัน แยกกับจุลภาคThe DataModel ( game ) ไม่ได้รับการพิจารณาตัวอย่างเช่น Part ใน Workspace อาจส่งคืน Workspace.Part
เมื่อเรียกใช้บน Instance ที่ไม่ใช่ลูกหลานของ DataModel ฟังก์ชันนี้พิจารณาบรรพบุรุษทั้งหมดจนถึงและรวมถึงบรรพบุรุษสูงสุดโดยไม่มี Parent
ฟังก์ชันนี้มีประโยชน์สำหรับการบันทึกและการแก้ไขข้อผิดพลาดคุณไม่ควรพยายามแยกสตริงที่ส่งคืนสําหรับการดําเนินการที่มีประโยชน์ใดๆ; ฟังก์ชันนี้ไม่หลบหนีช่วงเวลา (หรือสัญลักษณ์อื่นๆ) ในชื่อวัตถุคือ แม้ว่าออกจะปรากฏเป็นตัวระบุ Luau ที่ถูกต้องบ่อยครั้ง แต่ก็ไม่ได้รับประกัน
ส่งค่ากลับ
ตัวอย่างโค้ด
This code sample demonstrates the behavior of Instance:GetFullName(). It shows how the function behaves when called on an object not in the DataModel hierarchy, and it also shows how the return value does not escape special characters.
-- Create a simple hierarchy
local model = Instance.new("Model")
local part = Instance.new("Part")
part.Parent = model
local fire = Instance.new("Fire")
fire.Parent = part
print(fire:GetFullName()) --> Model.Part.Fire
model.Parent = workspace
print(fire:GetFullName()) --> Workspace.Model.Part.Fire
part.Name = "Hello, world"
print(fire:GetFullName()) --> Workspace.Model.Hello, world.Fire
This code sample re-implements the Instance:GetFullName() function in Lua.
local function getFullName(object)
local result = object.Name
object = object.Parent
while object and object ~= game do
-- Prepend parent name
result = object.Name .. "." .. result
-- Go up the hierarchy
object = object.Parent
end
return result
end
print(getFullName(workspace.Camera)) --> Workspace.Camera
GetStyledPropertyChangedSignal
พารามิเตอร์
ส่งค่ากลับ
GetTags
วิธีนี้จะคืนเป็นคอลเลกชันของแท็กที่ใช้กับตัวอย่างที่กำหนดเป็นข้อความคุณสามารถเพิ่มแท็กได้ทั้งในสตูดิโอในหน้าต่าง คุณสมบัติ หรือในระหว่างการทำงานด้วย AddTag()
วิธีนี้มีประโยชน์เมื่อคุณต้องการทำอะไรบางอย่างด้วยแท็กหลายแท็กบนตัวอย่างในครั้งเดียวอย่างไรก็ตาม ไม่ควรใช้วิธีนี้ในการตรวจสอบการมีอยู่ของแท็กเดียว; แทนที่จะใช้ HasTag() เพื่อตรวจสอบแท็กเฉพาะ
ส่งค่ากลับ
HasTag
วิธีนี้จะคืน true หากแท็กที่ให้มาถูกเพิ่มลงในวัตถุคุณสามารถเพิ่มแท็กได้ทั้งใน Studio ในหน้าต่าง คุณสมบัติ หรือระหว่างการรันไทม์ด้วย AddTag()
พารามิเตอร์
ส่งค่ากลับ
IsAncestorOf
ส่งคืนจริงหาก Instance เป็นบรรพบุรุษของทายาทที่กำหนด
An Instance ถือเป็นบรรพบุรุษของวัตถุหากวัตถุมี Instance.Parent หรือหนึ่งในพ่อแม่ของมันมี Instance.Parent ถูกตั้งค่าเป็น Instance
ดูเพิ่มเติม, Instance:IsDescendantOf() .
พารามิเตอร์
ส่งค่ากลับ
ตัวอย่างโค้ด
Demonstrates determining if one instance is the ancestor of another using Instance:IsAncestorOf()
Workspace and SpawnLocation are ancestors of the SpawnLocation's decal. Workspace is an ancestor of SpawnLocation.
SpawnLocation and its decal are descendants of Workspace, not ancenstors. Decal is a descendant to SpawnLocation, not an ancestor.
local Workspace = game:GetService("Workspace")
local spawnLocation = Workspace.SpawnLocation
local decal = spawnLocation.Decal
-- These statements are true
print(Workspace:IsAncestorOf(spawnLocation))
print(Workspace:IsAncestorOf(decal))
print(spawnLocation:IsAncestorOf(decal))
-- These statements are false
print(spawnLocation:IsAncestorOf(Workspace))
print(decal:IsAncestorOf(Workspace))
print(decal:IsAncestorOf(spawnLocation))
IsDescendantOf
ส่งคืน true หาก Instance เป็นลูกหลานของบรรพบุรุษที่กำหนด
โปรดทราบว่า IsDescendantOf() ไม่สามารถใช้กับพารามิเตอร์ของ nil เพื่อตรวจสอบว่าวัตถุถูกลบออกหรือไม่
ดูเพิ่มเติม Instance:IsAncestorOf() .
พารามิเตอร์
ส่งค่ากลับ
ตัวอย่างโค้ด
local part = Instance.new("Part")
print(part:IsDescendantOf(game))
--> false
part.Parent = workspace
print(part:IsDescendantOf(game))
--> true
part.Parent = game
print(part:IsDescendantOf(game))
--> true
IsPropertyModified
ส่งคืน true หากมูลค่าที่เก็บไว้ในคุณสมบัติที่ระบุเป็นไม่ได้เป็นค่าเริ่มต้นตัวอย่างเช่น หากการส่งออกคุณสมบัติ Rotation ของ TextLabel ชี้ไปที่ 0 แล้วเรียก IsPropertyModified("Rotation") บนฉลากจะส่งคืน false เพราะ 0 เป็นค่าเริ่มต้นสำหรับ TextLabel.Rotation
พารามิเตอร์
ส่งค่ากลับ
บูลีนบ่งบอกว่าคุณสมบัติถูกแก้ไขหรือไม่
RemoveTag
วิธีนี้ลบแท็กออกจากตัวอย่างมันจะไม่โยนข้อผิดพลาดหากวัตถุไม่มีแท็กการลบแท็กสําเร็จจะเปิดใช้งานสัญญาณที่สร้างโดย CollectionService:GetInstanceRemovedSignal() ด้วยแท็กที่กำหนดไว้
โปรดทราบว่าเมื่อทำการแท็กตัวอย่าง มันเป็นเรื่องธรรมดาที่ทรัพยากรบางอย่างจะถูกใช้เพื่อให้แท็กมีฟังก์ชัน เช่น การเชื่อมต่อกิจกรรมหรือตารางเพื่อป้องกันการรั่วไหลของหน่วยความจํา เป็นความคิดที่ดีที่จะทําความสะอาดพวกเขา (ตัดการเชื่อมต่อ, ตั้งค่าเป็น nil เป็นต้น) เมื่อไม่จําเป็นต้องใช้แท็กอีกต่อไป
พารามิเตอร์
ส่งค่ากลับ
ResetPropertyToDefault
รีเซ็ตคุณสมบัติเป็นค่าเริ่มต้นตัวอย่างเช่น การโทร ResetPropertyToDefault("Rotation") บน TextLabel เทียบเท่ากับการตั้งค่า Rotation ของมันเป็น 0 (ค่าเริ่มต้นของคุณสมบัติ)
พารามิเตอร์
ส่งค่ากลับ
SetAttribute
วิธีนี้ตั้งค่าคุณสมบัติที่มีชื่อที่กำหนดให้เป็นค่าที่กำหนดไว้หากค่าที่ให้มีค่าเป็น nil คุณสมบัติจะถูกลบเนื่องจาก nil จะถูกส่งคืนโดยค่าเริ่มต้น
ตัวอย่างเช่น ชิ้นส่วนโค้ดต่อไปนี้ตั้งค่าคุณสมบัติ InitialPosition ของตัวแปรของอินสแตนซ์เป็น Vector3.new(0, 10, 0) :
local Workspace = game:GetService("Workspace")local part = Workspace.Partpart:SetAttribute("InitialPosition", Vector3.new(0, 10, 0))
ข้อจํากัด
ข้อกำหนดและข้อจำกัดในการตั้งชื่อ:
- ชื่อต้องใช้เฉพาะตัวอักษรและตัวเลขอัลฟาและขีดเส้นใต้เท่านั้น
- ไม่อนุญาตให้มีช่องว่างหรือสัญลักษณ์ที่ไม่ซ้ำกัน
- สตริงต้องมีความยาวไม่เกิน 100 ตัวอักษร
- ชื่อไม่สามารถเริ่มต้นด้วย RBX ได้ หากไม่มีผู้เรียกเป็นสคริปต์หลักของ Roblox (สำรองไว้สำหรับ Roblox)
พิมพ์จะมีการโยนข้อผิดพลาด
ดูเพิ่มเติม
- Instance:GetAttribute() ซึ่งคืนค่าที่ได้รับการกำหนดให้กับชื่อคุณสมบัติที่กำหนดไว้
- Instance:GetAttributes() อินสแตนซ์
พารามิเตอร์
ชื่อของคุณสมบัติที่กําลังตั้งค่า
มูลค่าที่จะตั้งค่าคุณสมบัติที่กำหนดไว้
ส่งค่ากลับ
WaitForChild
คืนบุตรของ Instance ด้วยชื่อที่กำหนดหากเด็กไม่มีอยู่จะสร้างกระทู้ปัจจุบันจนกว่าจะมีหากพารามิเตอร์ timeOut ถูกระบุ วิธีนี้จะหมดเวลาหลังจากจำนวนวินาทีที่กำหนดและจะส่งคืน nil
การใช้งานหลัก
WaitForChild() มีความสำคัญอย่างยิ่งเมื่อทำงานกับโค้ดที่รันโดยไคลเอนต์ใน LocalScriptเครื่องยนต์ Roblox ไม่รับประกันเวลาหรือลำดับที่วัตถุถูกสําเนาจากเซิร์ฟเวอร์ไปยังไคลเอนต์นอกจากนี้หากประสบการณ์มี Workspace.StreamingEnabled ตั้งค่าเป็นจริง BaseParts ที่อยู่ไกลจากตัวละครของผู้เล่นอาจไม่ถูกสตรีมไปยังไคลเอนต์ อาจทำให้สคริปต์พังเมื่อสแกนวัตถุที่ยังไม่มีอยู่ในไคลเอนต์
บันทึก
- ฟังก์ชันนี้จะไม่ส่งถ้ามีเด็กที่มีชื่อที่กำหนดอยู่เมื่อทำการโทรเรียก
- เป็นทางเลือกที่มีประสิทธิภาพมากขึ้นสำหรับวัตถุที่คาดว่าจะมีอยู่
- หากการโทรไปที่วิธีนี้เกิน 5 วินาทีโดยไม่กลับมาและไม่มีพารามิเตอร์ timeOut ถูกระบุ คำเตือนจะถูกพิมพ์ลงในออกที่กระบวนท่าอาจให้ผลตลอดไป
พารามิเตอร์
The Instance.Name ที่จะมองหา
พารามิเตอร์เวลาหมดอายุที่เลือกได้
ส่งค่ากลับ
ตัวอย่างโค้ด
The following code waits for an instance named "Part" to be added to Workspace.
local part = workspace:WaitForChild("Part")
print(part.Name .. " has been added to the Workspace")
อีเวนต์
AncestryChanged
ไฟเมื่อคุณสมบัติ Instance.Parent ของวัตถุหรือหนึ่งในบรรพบุรุษเปลี่ยนแปลง
อีเวนต์นี้รวมถึงพารามิเตอร์สองตัว: child หมายถึง Instance ซึ่ง Instance.Parent ถูกเปลี่ยนแปลงจริงๆ ในขณะที่ parent หมายถึง Instance.Parent อินสแตนซ์
คุณสามารถใช้เหตุการณ์นี้เพื่อติดตามการลบของตัวอย่างใน Studio เช่น การลบแบบด้วยมือใน Explorer หรือผ่านปลั๊กอินหากต้องการตรวจสอบเมื่อติดตั้งตัวอย่างโดยใช้ Instance:Destroy() ให้ใช้อีเวนต์ Instance.Destroying แทน
พารามิเตอร์
The Instance ที่มี Instance.Parent ถูกเปลี่ยนแปลง
ใหม่ Instance.Parent ของ Instance ซึ่ง Instance.Parent ถูกเปลี่ยนแปลง
ตัวอย่างโค้ด
Demonstrates detecting changes to an instance's ancestry by connecting to the Instance.AncestryChanged event.
The ChangingPart's Parent is set to different values overtime. The parent of the part is the part's ancestor, so the Instance.AncestryChanged event will fire whenever it changes.
local Workspace = game:GetService("Workspace")
local redPart = script.Parent.RedPart
local bluePart = script.Parent.BluePart
local changingPart = script.Parent.ChangingPart
-- Change the color of changingPart based on it's Parent
local function onAncestryChanged(part: Part, parent: Instance)
if parent == redPart then
changingPart.Color = Color3.new(1, 0, 0)
elseif parent == bluePart then
changingPart.Color = Color3.new(0, 0, 1)
else
changingPart.Color = Color3.new(1, 1, 1)
end
print(`{part.Name} is now parented to {parent.Name}`)
end
changingPart.AncestryChanged:Connect(onAncestryChanged)
-- Set changingPart's Parent property to different instances over time
while true do
task.wait(2)
changingPart.Parent = redPart
task.wait(2)
changingPart.Parent = bluePart
task.wait(2)
changingPart.Parent = Workspace
end
AttributeChanged
อีเวนต์นี้จะเกิดขึ้นเมื่อมีการเปลี่ยนแปลงคุณสมบัติใดๆ บนตัวอย่าง รวมถึงเมื่อคุณสมบัติถูกตั้งค่าเป็น nilชื่อของคุณสมบัติที่เปลี่ยนแปลงถูกส่งไปยังฟังก์ชันที่เชื่อมต่อ
ตัวอย่างเช่น ส่วนตัวโค้ดต่อไปนี้เชื่อมโยงฟังก์ชัน attributeChanged() เพื่อยิงเมื่อมีการเปลี่ยนแปลงคุณสมบัติใดๆ ของส่วนหนึ่ง:
local Workspace = game:GetService("Workspace")
local part = Workspace.Part
local function attributeChanged(attributeName)
print(attributeName, "changed")
end
part.AttributeChanged:Connect(attributeChanged)
ดูเพิ่มเติม Instance:GetAttributeChangedSignal() ซึ่งจะส่งกลับเหตุการณ์ที่จะยิงเมื่อคุณลักษณะที่กำหนดเฉพาะเปลี่ยนแปลง
พารามิเตอร์
ชื่อของคุณสมบัติที่ถูกเปลี่ยนแปลง
ChildAdded
ไฟไหม้หลังจากที่วัตถุถูกผูกกับสิ่งนี้ Instance
โปรดทราบเมื่อใช้ฟังก์ชันนี้บนไคลเอนต์เพื่อตรวจจับวัตถุที่สร้างโดยเซิร์ฟเวอร์จำเป็นต้องใช้ Instance:WaitForChild() เมื่อจัดเรียงวงศ์ลูกของวัตถุเหล่านี้เนื่องจากวัตถุและบุตรหลานของมันไม่ได้รับประกันว่าจะสามารถสําเนาจากเซิร์ฟเวอร์ไปยังไคลเอนต์ได้พร้อมกันตัวอย่าง:
local Workspace = game:GetService("Workspace")
Workspace.ChildAdded:Connect(function(child)
-- Use WaitForChild() since descendants may not have replicated yet
local head = child:WaitForChild("Head")
end)
โปรดทราบว่าฟังก์ชันนี้ทำงานได้เฉพาะสําหรับบุตรหลานที่ใกล้ที่สุดของ Instance สําหรับฟังก์ชันที่จับภาพลูกหลานทั้งหมดใช้ Instance.DescendantAdded
ดูเพิ่มเติม Instance.ChildRemoved .
พารามิเตอร์
ตัวอย่างโค้ด
This snippet prints the names of objects as they are added to the Workspace:
local function onChildAdded(instance)
print(instance.Name .. " added to the workspace")
end
workspace.ChildAdded:Connect(onChildAdded)
local part = Instance.new("Part")
part.Parent = workspace --> Part added to the Workspace
ChildRemoved
ไฟไหม้หลังจากที่เด็กถูกลบออกจากสิ่งนี้ Instance
ลบหมายถึงเมื่อพ่อของวัตถุเปลี่ยนจากสิ่งนี้ Instance เป็นสิ่งอื่นนอกเหนือจากสิ่งนี้ Instanceโปรดทราบว่าอีเวนต์นี้จะเกิดขึ้นเมื่อเด็กถูกทําลาย (โดยใช้ Instance:Destroy() ) เนื่องจากฟังก์ชันการทําลายตั้งค่าผู้ปกครองของวัตถุเป็น nil
ฟังก์ชันนี้ทำงานได้เฉพาะสําหรับเด็กที่ใกล้ที่สุดของ Instance สําหรับฟังก์ชันที่จับภาพลูกหลานทั้งหมดใช้ Instance.DescendantRemoving
ดูเพิ่มเติม Instance.ChildAdded .
พารามิเตอร์
ตัวอย่างโค้ด
This snippet prints the names of objects as they are removed from the Workspace:
local function onChildRemoved(instance)
print(instance.Name .. " removed from the workspace")
end
workspace.ChildRemoved:Connect(onChildRemoved)
local part = Instance.new("Part")
part.Parent = workspace
task.wait(2)
part:Destroy()
DescendantAdded
อีเวนต์นี้จะเกิดขึ้นหลังจากที่มีการเพิ่มลูกหลานลงใน Instance
เมื่อยิงสำหรับทุกบุตรหลาน, การเลี้ยงดูวัตถุไปยัง Instance จะยิงเหตุการณ์สำหรับวัตถุนี้และบุตรหลานทั้งหมดเป็นรายบุคคล
หากคุณกังวลเฉพาะกับเด็กโดยตรง ของ ของ Instance ให้ใช้ Instance.ChildAdded แทน
ดูเพิ่มเติม Instance.DescendantRemoving .
พารามิเตอร์
ตัวอย่างโค้ด
This following example will print the name of any object that is added to the Workspace:
local function onDescendantAdded(descendant)
print(descendant)
end
workspace.DescendantAdded:Connect(onDescendantAdded)
local part = Instance.new("Part")
part.Parent = workspace
DescendantRemoving
อีเวนต์นี้จะยิง ทันทีก่อนที่ ผู้ปกครอง Instance จะมีการเปลี่ยนแปลงที่ทำให้ตัวละคร ลูกหลาน ไม่ใช่ลูกหลานแล้วDestroy() เปลี่ยน Parent อินสแตนซ์nil ดังนั้นการเรียกวิธีนั้นบนลูกหลานของพ่อจะทำให้เกิดเหตุการณ์นี้
เนื่องจากอีเวนต์นี้จะยิง ก่อน การลบลูกหลาน พ่อของลูกหลานจะไม่เปลี่ยนแปลงในเวลาที่อีเวนต์นี้ยิงหากลูกหลานเป็นลูกหลานโดยตรงของพ่อแม่เช่นกัน อีเวนต์นี้จะยิงก่อน
หากมีลูกหลานมีลูก อีเวนต์นี้จะยิงกับลูกหลานก่อน ตามด้วยลูกหลานของมัน
คำเตือน
อีเวนต์นี้จะยิงด้วยวัตถุลูกหลานที่ถูกลบออกการตั้งค่า Parent ของลูกหลานให้เป็นสิ่งอื่นจะล้มเหลวต่อไปนี้เป็นตัวอย่างที่แสดงให้เห็นถึงเรื่องนี้
local Workspace = game:GetService("Workspace")
Workspace.DescendantRemoving:Connect(function(descendant)
-- Do not manipulate the parent of the descendant in this function!
-- This event fires BECAUSE the parent was manipulated, and the change hasn't happened yet
-- Therefore, it is problematic to change the parent like this:
descendant.Parent = game
end)
local part = Instance.new("Part")
part.Parent = Workspace
part.Parent = nil
ดูเพิ่มเติม DescendantAdded .
พารามิเตอร์
ตัวอย่างโค้ด
The following example prints the name of any descendant as it is being removed from the Workspace:
workspace.DescendantRemoving:Connect(function(descendant)
print(descendant.Name .. " is currently parented to " .. tostring(descendant.Parent))
end)
local part = Instance.new("Part")
part.Parent = workspace
part.Parent = nil
--> Part is currently parented to Workspace
print(part.Parent)
--> nil
Destroying
The Instance จะไม่ถูกลบออกจากหน่วยความจําในขณะที่ฟังก์ชันที่เชื่อมต่อยังคงใช้งานอยู่อย่างไรก็ตาม หากฟังก์ชันให้ผลที่จุดใดก็ตาม Instance และบรรดาลูกหลานของมันจะถูกถ่ายโอนไปยัง nil
หากคุณสมบัติ Workspace.SignalBehavior ถูกตั้งค่าเป็น Enum.SignalBehavior.Immediate อีเวนต์นี้จะเกิดขึ้นทันทีก่อนที่ Instance หรือหนึ่งในบรรพบุรุษจะถูกทําลายด้วย Instance:Destroy()
หากคุณสมบัติ Workspace.SignalBehavior ถูกตั้งค่าเป็น Enum.SignalBehavior.Deferred อีเวนต์นี้จะเกิดขึ้นที่จุดระงับการดำเนินการต่อไป ซึ่งจะเป็นหลังจากที่ Instance หรือหนึ่งในบรรพบุรุษจะถูกทําลายด้วย Instance:Destroy()
ด้วยพฤติกรรม Deferred การเชื่อมต่อสคริปต์กับอีเวนต์ของตัวเอง Instance.Destroying เป็นปัญหาเนื่องจากสคริปต์จะถูกทําลายก่อนที่จะสามารถเรียกคืนได้ (หมายความว่ามันจะไม่ถูกดําเนินการ)
เมื่อลบ Instance ใน Studio เช่นการลบด้วยตนเองผ่าน Explorer หรือผ่านปลั๊กอินก็ไม่ทำลาย Instanceแทนที่จะตั้งค่าพ่อเป็น nil ซึ่งคุณสามารถติดตามได้ด้วย Instance.AncestryChanged
ตัวอย่างโค้ด
This sample demonstrates how, when using Immediate signal behavior, an Instance being destroyed remains in place until the connected function yields.
local part = Instance.new("Part", workspace)
local function onPartDestroying()
print("Before yielding:", part:GetFullName(), #part:GetChildren())
task.wait()
print("After yielding:", part:GetFullName(), #part:GetChildren())
end
part.Destroying:Connect(onPartDestroying)
part:Destroy()
This sample demonstrates how, when using Deferred signal behavior, an Instance is destroyed before the signal fires.
local part = Instance.new("Part", workspace)
local function onPartDestroying()
print("In signal:", part:GetFullName(), #part:GetChildren())
end
part.Destroying:Connect(onPartDestroying)
print("Before destroying:", part:GetFullName(), #part:GetChildren())
part:Destroy()
print("After destroying:", part:GetFullName(), #part:GetChildren())