คุณสมบัติและค่าตัวละคร

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

การทำให้ประสบการณ์ใช้งานได้หมายถึงการจัดการคุณสมบัติและคุณสมบัติของวัตถุ:

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

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

สั่งซื้อ Replication

ก่อนที่คุณจะเริ่มดึงและจัดการวัตถุ คุณต้องมีความรู้ในการสั่งคำสั่งเลียนแบบ

เครื่องมือ Roblox ไม่รับประกันความสัมพันธ์ระหว่างวัตถุที่เรียกจากเซิร์ฟเวอร์ไปยังคลายเอ็นท์ซึ่งทำให้วิธีการ Instance:WaitForChild() จำเป็นสำหรับการเข้าถึงวัตถุในสคร

  1. ลูกค้าโหลดเนื้อหาของ ReplicatedFirst เช่นหน้าโหลด สินทรัพย์ และสคริป

  2. 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()

  1. ลูกค้ายังคงโหลดส่วนที่เหลือของประสบการณ์

  2. เมื่อมันเสร็จสิ้น, เหตุการณ์ game.Loaded จะเริ่มและ game:IsLoaded() จะกลับมาที่จริง

  3. LocalScripts ใน StarterPlayerScripts วิ่งรวมทั้ง client Scripts ใน 0> Class.ReplicatedStorage0> ด้วย เหล่าสคริปต์เหล่านี้สามารถขอได้อย่างปลอ

  4. ตัวละคร Character ของผู้เล่นจะปรากฏในประสบการณ์

  5. LocalScripts ใน StarterCharacterScripts วิ่ง

หากประสบการณ์ของคุณใช้ การสตรีมอินสแตนซ์ ( Workspace.StreamingEnabled ) บางหรือส่วนใหญ่ของวัตถุอาจไม่ได้โหลดเข้าสู่พื้นที่ท

รับวัตถุ

ขั้นตอนแรกในการเปลี่ยนแปลงสมบัติของวัตถุและคุณสมบัติคือการรับอ้างถึงวัตถุ วิธีที่เรียบง่ายที่สุดคือการทำให้สคริปเป็นลูกของวัตถุใน Explorer และใช้ script.Parent เพื่อรับอ้างถึงวัตถุ

A script parented to a model in the Explorer.

local sign = script.Parent

วิธีการที่พบบ่อยที่สุดคือการรับวัตถุจาก บริการ โดยใช้วิธีการเช่น Instance:FindFirstChild() หรือ Instance:WaitForChild()

A Model within a Folder in ReplicatedStorage.

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local signsFolder = ReplicatedStorage:WaitForChild("Signs")
local sign = signsFolder:WaitForChild("InteractiveSign")

การเปลี่ยนแปลงสมบัติ

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

A Model within ReplicatedStorage.

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local chair = ReplicatedStorage:WaitForChild("Chair")
chair.LeftArmRest.Size = Vector3.new(10, 1, 10)

การสร้างลักษณะ

แม้ว่าคุณจะสามารถสร้างโปรแกรมอย่างชัดเจน แต่วิธีการที่พบบ่อยที่สุดคือการสร้างพวกเขาด้วยค่าเริ่มต้นใน UI ของผู้ใช้ Studio แล้วคุณสามารถใช้สคริปต์เพื่อปรับแต่งค่าเหล่านั้นตามการตอบสนองของผู้เล่น

A script within a folder in ReplicatedStorage.

สำหรับข้อมูลเกี่ยวกับการสร้างลักษณะใน Studio โปรดดู ลักษณะดินสอ .

การตั้งค่าคุณสมบัติ

เพื่อปรับค่าของคุณสมบัติให้เป็น Instance:SetAttribute() ด้วยชื่อและค่า

สร้างหรือแก้ไขลักษณะ

local cabbage = script.Parent
cabbage:SetAttribute("Harvestable", true)

หากค่าตัวไม่มีอยู่แล้วในขณะนี้วิธีนี้จะสร้างมัน

รับค่าตัวละคร

เพื่อรับค่าของค่าตัวละครหนึ่งที่มีอยู่ โปรดเรียก Instance:GetAttribute() บนตัวละคร

รับค่าละครอัตริบ

local cabbage = script.Parent
cabbage:SetAttribute("Harvestable", true)
local isHarvestable = cabbage:GetAttribute("Harvestable")
print(isHarvestable) --> true

เช่นเดียวกันคุณสามารถรับค่าตัวละครทั้งหมดโดยการเรียก Instance:GetAttributes() นี้ วิธีนี้จะสร้างพจนารูปแบบคู่สมุดที่มีค่า

รับค่าตัวละครทั้งหมด

local cabbage = script.Parent
local cabbageAttributes = cabbage:GetAttributes()
print(cabbageAttributes.GrowthRate) --> 2
for k, v in cabbageAttributes do
print(k, v)
end

การลบลักษณะ

เพื่อลบค่าตัวละครองของคุณละครองให้มีค่าเป็น zero

ลบลักษณะ

local cabbage = script.Parent
cabbage: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)