การทำให้ประสบการณ์ใช้งานได้หมายถึงการจัดการคุณสมบัติและคุณสมบัติของวัตถุ:
สมบัติคือส่วนหนึ่งของคลาสวัตถุ เช่น สมบัติ BasePart.Anchored ควบคุมการเปลี่ยนแปลงของฟิสิกส์สำหรับชิ้นส่วน ในประสบการณ์แบบแทร็กแอนด์ฟิลด์ คุณอาจต้องการแอนครัสหร
ลักษณะเป็นสมบัติสกุลที่คุณกำหนด โดยปกติลักษณะจะใช้ค่าตัวละครที่คุณกำหนดเพื่อตั้งราคาสำหรับเมล็ดและขนาดลำตัวสูงสุดที่กระถางสามารถรองรับได้
สั่งซื้อ Replication
ก่อนที่คุณจะเริ่มดึงและจัดการวัตถุ คุณต้องมีความรู้ในการสั่งคำสั่งเลียนแบบ
เครื่องมือ Roblox ไม่รับประกันความสัมพันธ์ระหว่างวัตถุที่เรียกจากเซิร์ฟเวอร์ไปยังคลายเอ็นท์ซึ่งทำให้วิธีการ Instance:WaitForChild() จำเป็นสำหรับการเข้าถึงวัตถุในสคร
ลูกค้าโหลดเนื้อหาของ ReplicatedFirst เช่นหน้าโหลด สินทรัพย์ และสคริป
Class.LocalScript|LocalScripts (และ Scripts ด้วย RunContext ของ 0> Enum.RunContext.Client|Client0>) ใน LocalScripts3> ทำ
-- ปลอดภัยlocal ReplicatedFirst = game:GetService("ReplicatedFirst")local LoadingScreen = require(ReplicatedFirst.LoadingScreen)
สคริปต์เหล่านี้ ไม่สามารถ ได้รับวัตถุจากบริการอื่น ๆ เนื่องจากพวกเขาอาจยังโหลดไม่เสร็จ:
-- ไม่ปลอดภัยlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local PickupManager = require(ReplicatedStorage.PickupManager)
คุณสามารถใช้ WaitForChild() ในสคริปต์เหล่านี้เพื่อรับวัตถุจากบริการอื่น ๆ แต่การทำเช่นนี้จะลดประโยชน์จากการใช้ WaitForChild()
ลูกค้ายังคงโหลดส่วนที่เหลือของประสบการณ์
เมื่อมันเสร็จสิ้น, เหตุการณ์ game.Loaded จะเริ่มและ game:IsLoaded() จะกลับมาที่จริง
LocalScripts ใน StarterPlayerScripts วิ่งรวมทั้ง client Scripts ใน 0> Class.ReplicatedStorage0> ด้วย เหล่าสคริปต์เหล่านี้สามารถขอได้อย่างปลอ
ตัวละคร Character ของผู้เล่นจะปรากฏในประสบการณ์
LocalScripts ใน StarterCharacterScripts วิ่ง
หากประสบการณ์ของคุณใช้ การสตรีมอินสแตนซ์ ( Workspace.StreamingEnabled ) บางหรือส่วนใหญ่ของวัตถุอาจไม่ได้โหลดเข้าสู่พื้นที่ท
รับวัตถุ
ขั้นตอนแรกในการเปลี่ยนแปลงสมบัติของวัตถุและคุณสมบัติคือการรับอ้างถึงวัตถุ วิธีที่เรียบง่ายที่สุดคือการทำให้สคริปเป็นลูกของวัตถุใน Explorer และใช้ script.Parent เพื่อรับอ้างถึงวัตถุ
local sign = script.Parent
วิธีการที่พบบ่อยที่สุดคือการรับวัตถุจาก บริการ โดยใช้วิธีการเช่น Instance:FindFirstChild() หรือ Instance:WaitForChild()
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)
การสร้างลักษณะ
แม้ว่าคุณจะสามารถสร้างโปรแกรมอย่างชัดเจน แต่วิธีการที่พบบ่อยที่สุดคือการสร้างพวกเขาด้วยค่าเริ่มต้นใน UI ของผู้ใช้ 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
การลบลักษณะ
เพื่อลบค่าตัวละครองของคุณละครองให้มีค่าเป็น zero
ลบลักษณะ
local cabbage = script.Parentcabbage:SetAttribute("GrowthRate", nil)
ตรวจจับการเปลี่ยนแปลง
มีหลายวิธีในการฟังสำหรับการเปลี่ยนแปลงของโปรไฟล์และคุณสมบัติ:
กิจกรรม Instance.Changed ฟังการเปลี่ยนแปลงใด ๆ ในสมบัติทรัพย์ (รวมถึงคุณสมบัติ) และส่งชื่อของสมบัติทรัพย์ที่เปลี่ยนแปลงเป็นตัวอ้างอิง
กิจกรรม Instance.AttributeChanged ฟังการเปลี่ยนแปลงใด ๆ ในค่าตัวละครและส่งชื่อค่าตัวละครที่เปลี่ยนแปลงเป็นพารามิเตอร์
วิธี Instance:GetPropertyChangedSignal() ช่วยให้คุณฟังสำหรับการเปลี่ยนแปลงหนึ่งอย่างที่คุณไม่ได้เปลี่ยนแปลงและผ่านปารามิเตอร์
วิธี Instance:GetAttributeChangedSignal() ช่วยให้คุณฟังสำหรับการเปลี่ยนแปลงหนึ่งค่าตัวละครและไม่ผ่านพารามิเตอร์
เนื่องจากข้อมูลที่น้อยที่สุดที่เหตุการณ์และวิธีการเหล่านี้ส่งเป็นตัวแปรจึงทำให้พวกเขาเหมาะสมกับหน้างานที่ปลอดภัย โดยเฉพาะ Instance:GetPropertyChangedSignal() และ Class
ฟังสำหรับการเปลี่ยนแปลง
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)
-- ไฟที่เปลี่ยนแปลง, สัญลักษณ์การเปลี่ยนแปลงและ GetAttributeChangedSignal()
cabbage:SetAttribute("GrowthRate", 3)