การทำให้ประสบการณ์มีปฏิสัมพันธ์บ่อยครั้งหมายถึงการควบคุมคุณสมบัติและลักษณะของวัตถุ:
คุณสมบัติเป็นส่วนหนึ่งของคลาสวัตถุตัวควบคุมคุณสมบัติ BasePart.Anchored เช่น ควบคุมฟิสิกส์สำหรับชิ้นส่วนในประสบการณ์สนามและสนาม คุณอาจต้องการที่จะยึดดิสก์หรือหอกในทันทีที่มันลงจอดเพื่อให้ผู้เล่นมีตัวบ่งบอกทางภาพว่ามันเดินทางไกลแค่ไหน
ลักษณะที่เป็นอยู่เป็นคุณสมบัติที่กําหนดเองที่คุณกําหนดไว้ตัวอย่างเช่นโครงการอ้างอิงของ พืช ใช้คุณสมบัติในการตั้งราคาซื้อสำหรับเมล็ดและขนาดพืชสูงสุดที่หม้อสามารถจัดเก็บได้
ลำดับการเลียนแบบ
ก่อนที่คุณจะเริ่มกู้คืนและจัดการวัตถุ คุณต้องมีความเข้าใจเกี่ยวกับลำดับการเลียนแบบ
เครื่อง Roblox ไม่รับประกันลำดับที่วัตถุถูกสําเนาจากเซิร์ฟเวอร์ไปยังไคลเอนต์ซึ่งทําให้วิธี Instance:WaitForChild() เป็นสิ่งจําเป็นสําหรับการเข้าถึงวัตถุในสคริปต์ไคลเอนต์โดยเฉพาะอย่างยิ่งวัตถุใน Workspaceยังคงมีบางด้านของกระบวนการที่คาดเดาได้:
ไคลเอนต์โหลดเนื้อหาของ ReplicatedFirst เช่นหน้าจอโหลด ทรัพยากร และสคริปต์
LocalScripts (และ Scripts ด้วย RunContext ของ Client ) ในการดำเนินการ ReplicatedFirstสคริปต์เหล่านี้สามารถรับวัตถุได้อย่างปลอดภัยจาก ReplicatedFirst โดยไม่ต้องใช้ WaitForChild() :
-- ปลอดภัยlocal ReplicatedFirst = game:GetService("ReplicatedFirst")local LoadingScreen = require(ReplicatedFirst.LoadingScreen)สคริปต์เหล่านี้ ไม่สามารถรับวัตถุจากบริการอื่นได้อย่างปลอดภัย เพราะพวกเขาอาจยังไม่ได้โหลด:
-- ไม่ปลอดภัยlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local PickupManager = require(ReplicatedStorage.PickupManager)คุณ สามารถใช้ WaitForChild() เพื่อรับวัตถุจากบริการอื่น แต่การทำเช่นนั้นจะเพิกเฉยประโยชน์ของการใช้ ReplicatedFirst
ไคลเอนต์ยังคงโหลดส่วนที่เหลือของประสบการณ์ต่อไป
เมื่อสิ้นสุด การกระตุ้นอีเวนต์ game.Loaded จะเกิดขึ้นและ game:IsLoaded() จะส่งคืนความจริง
LocalScripts ใน Players.Player.PlayerScripts (คัดลอกจาก StarterPlayerScripts ) วิ่งรวมทั้งไคลเอนต์ Scripts ใน ReplicatedStorageสคริปต์เหล่านี้สามารถรับวัตถุได้อย่างปลอดภัยจาก ReplicatedStorage โดยไม่ต้องใช้ WaitForChild()
โมเดลของผู้เล่น Character จะปรากฏในประสบการณ์
LocalScripts ใน Workspace.Character (คัดลอกจาก StarterCharacterScripts ) ดำเนินการ
หากประสบการณ์ของคุณใช้การสตรีมตัวอย่าง ( ) บางหรือส่วนใหญ่อาจไม่ได้โหลดลงในพื้นที่ทำงาน ดังนั้นการใช้ ( ) เพื่อเข้าถึงวัตถุในพื้นที่ทำงานจึงเป็นมาตรการรักษาความปลอดภัยที่สำคัญยิ่งขึ้นโดยเฉพาะอย่างยิ่งดู สตรีมใน และ การควบคุมการสตรีมตามรูปแบบแต่ละรายการ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการโหลดและปรับแต่งพฤติกรรมการสตรีม
รับวัตถุ
ขั้นตอนแรกในการแก้ไขคุณสมบัติและลักษณะของวัตถุคือการรับการอ้างอิงถึงวัตถุทางออกที่ง่ายที่สุดคือการทำให้สคริปเป็นลูกของวัตถุใน Explorer และใช้ script.Parent เพื่ออ้างอิงถึงวัตถุ

local sign = script.Parent
ทางออกที่เป็นสากลมากขึ้นคือการรับวัตถุจากบริการ โดยใช้วิธีการเช่น หรือ

local ReplicatedStorage = game:GetService("ReplicatedStorage")local signsFolder = ReplicatedStorage:WaitForChild("Signs")local sign = signsFolder:WaitForChild("InteractiveSign")
ปรับแต่งคุณสมบัติ
คุณสามารถเข้าถึงคุณสมบัติได้อย่างง่ายดาย — เพียงใช้ . หลังจากการอ้างอิงวัตถุ — แม้ว่าคุณกำลังทำงานกับโมเดล คุณอาจต้องเลือกส่วนบางอย่างแทนโมเดลเอง

local ReplicatedStorage = game:GetService("ReplicatedStorage")local chair = ReplicatedStorage:WaitForChild("Chair")chair.LeftArmRest.Size = Vector3.new(10, 1, 10)
สร้างคุณสมบัติ
แม้ว่าคุณจะสามารถสร้างคุณลักษณะได้โดยการเขียนโปรแกรม แต่ทางออกที่พบบ่อยที่สุดคือการสร้างพวกเขาด้วยค่าเริ่มต้นในอินเทอร์เฟซผู้ใช้ Studioจากนั้นคุณสามารถใช้สคริปต์เพื่อแก้ไขค่าของพวกเขาตามการดำเนินการของผู้เล่น

สำหรับข้อมูลเกี่ยวกับการสร้างคุณลักษณะใน Studio ดู คุณลักษณะของตัวอย่าง
กำหนดค่าตัวละคร
เพื่อแก้ไขค่าของคุณสมบัติโดยเรียก Instance:SetAttribute() ด้วยชื่อและค่า
สร้างหรือแก้ไขคุณสมบัติ
local cabbage = script.Parentcabbage:SetAttribute("Harvestable", true)
หากคุณสมบัติไม่มีอยู่แล้ว วิธีนี้จะสร้างขึ้น
รับค่าคุณสมบัติ
เพื่อรับค่าของคุณสมบัติที่มีอยู่แล้วหนึ่งค่าโทร Instance:GetAttribute() บนตัวอย่าง
รับค่าคุณสมบัติ
local cabbage = script.Parentcabbage:SetAttribute("Harvestable", true)local isHarvestable = cabbage:GetAttribute("Harvestable")print(isHarvestable) --> true
เช่นเดียวกันคุณสามารถรับคุณสมบัติทั้งหมดโดยการโทร Instance:GetAttributes() วิธีนี้จะคืนสารบัญของคู่คีย์-ค่า
รับคุณสมบัติทั้งหมด
local cabbage = script.Parentlocal cabbageAttributes = cabbage:GetAttributes()print(cabbageAttributes.GrowthRate) --> 2for k, v in cabbageAttributes doprint(k, v)end
ลบคุณสมบัติ
เพื่อลบคุณสมบัติให้ตั้งค่าค่าของมันเป็น nil .
ลบคุณสมบัติ
local cabbage = script.Parentcabbage:SetAttribute("GrowthRate", nil)
ตรวจจับการเปลี่ยนแปลง
มีหลายวิธีในการฟังการเปลี่ยนแปลงของคุณสมบัติและลักษณะ:
- รายการเหตุการณ์ Instance.AttributeChanged ฟังการเปลี่ยนแปลงในคุณสมบัติใดๆ และส่งชื่อของคุณสมบัติที่เปลี่ยนแปลงเป็นพารามิเตอร์
- วิธี Instance:GetPropertyChangedSignal() ทำให้คุณสามารถฟังการเปลี่ยนแปลงของหนึ่งคุณสมบัติและไม่ส่งพารามิเตอร์
- วิธี Instance:GetAttributeChangedSignal() ทำให้คุณสามารถฟังการเปลี่ยนแปลงของหนึ่งคุณลักษณะและไม่ส่งพารามิเตอร์
เนื่องจากข้อมูลขั้นต่ำที่เหตุการณ์และวิธีการเหล่านี้ส่งเป็นพารามิเตอร์ทั้งหมดเหมาะสำหรับฟังก์ชันที่ไม่ระบุชื่อโดยเฉพาะอย่างยิ่ง Instance:GetPropertyChangedSignal() และ Instance:GetAttributeChangedSignal()เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับฟังก์ชันที่ไม่ระบุชื่อและทำงานร่วมกับเหตุการณ์ ดู กิจกรรม
ฟังการเปลี่ยนแปลง
local cabbage = script.Parent
-- ฟังก์ชันท้องถิ่น
local function onAnyPropertyChange(property)
-- เพิกเฉยการเปลี่ยนแปลงของคุณสมบัติ
if property ~= "Attributes" then
print(property) --> ชื่อ
print(cabbage[property]) --> กะหล่ำ1
end
end
local function onAnyAttributeChange(attribute)
print(attribute) --> เพิ่ม อัตราการเพิ่ม
print(cabbage:GetAttribute(attribute)) --> ปิด, 3
end
-- ฟังการเปลี่ยนแปลงและเชื่อมต่อกับฟังก์ชันท้องถิ่น
cabbage.Changed:Connect(onAnyPropertyChange)
cabbage.AttributeChanged:Connect(onAnyAttributeChange)
-- ฟังการเปลี่ยนแปลงและเชื่อมต่อกับฟังก์ชันไม่ระบุชื่อ
cabbage:GetPropertyChangedSignal("Name"):Connect(function()
print(cabbage.Name) --> กะหล่ำ1
end)
cabbage:GetAttributeChangedSignal("GrowthRate"):Connect(function()
print(cabbage:GetAttribute("GrowthRate")) --> 3
end)
-- ไฟได้เปลี่ยนและได้รับสัญญาณ GetPropertyChangedSignal()
cabbage.Name = "Cabbage1"
-- ไฟได้เปลี่ยนและสมบัติเปลี่ยนแปลง
cabbage:SetAttribute("Grow", false)
-- ไฟได้เปลี่ยนแปลงคุณลักษณะเปลี่ยนแปลง และรับสัญญาณการเปลี่ยนแปลงคุณลักษณะ()
cabbage:SetAttribute("GrowthRate", 3)