Deneyimleri sık sık interaktif hale getirmek, nesne özelliklerini ve özniteliklerini manipüle etmek demektir:
Özellikler nesne sınıfının bir parçasıdır.Örneğin, BasePart.Anchored özelliği parça için fiziği kontrol eder.Bir pist ve alan deneyiminde, oyuncuların seyahat ettiği mesafeyi gösteren bir görsel göstergeye sahip olması için anında bir diski veya javelini sabitlemek isteyebilirsiniz.
Öznitelikler temel olarak tanımladığınız özel özelliklerdir.Örneğin, Bitki referans projesi tohumların satın alma fiyatını ve bir saksın tutabileceği maksimum bitki boyutunu ayarlamak için öznitelikler kullanır.
Replikasyon sırası
Nesneleri almaya ve manipüle etmeye başlamadan önce, yeniden yazma sırasının bir anlayışına sahip olmalısınız.
Roblox Motoru, nesnelerin sunucudan istemciye yeniden yazıldığı sırayı garanti etmiyor, bu da Instance:WaitForChild() yönteminin özellikle istemcilerdeki nesnelerin erişimine erişmek için gerekli olmasını sağlıyor, özellikle de Workspace nesneleri.Yine de, sürecin bazı yönleri öngörülebilir:
Müşteri, yüklenme ekranı, varlıklar ve senaryolar gibi ReplicatedFirst içeriğini yükler.
(ve ile ) çalıştırılırken.Bu senaryolar, ReplicatedFirst kullanmadan güvenle nesneleri alabilir: WaitForChild()
-- Güvenlilocal ReplicatedFirst = game:GetService("ReplicatedFirst")local LoadingScreen = require(ReplicatedFirst.LoadingScreen)Bu senaryolar diğer hizmetlerden nesneleri güvenli bir şekilde alamaz, çünkü henüz yüklenmemiş olabilirler:
-- Güvenli değillocal ReplicatedStorage = game:GetService("ReplicatedStorage")local PickupManager = require(ReplicatedStorage.PickupManager)Bu senaryolarda diğer hizmetlerden nesneler almak için kullanabilirsiniz, ancak bunu yapmak kullanımının faydalarını yok eder.
Müşteri deneyimin geri kalanını yüklemeye devam ediyor.
Bitince, game.Loaded etkinliği ateşlenir ve game:IsLoaded() geri döner true.
LocalScripts içinde Players.Player.PlayerScripts (StarterPlayerScripts 'den kopyalanmış) çalıştır, ayrıca istemci Scripts içinde ReplicatedStorage .Bu senaryolar, ReplicatedStorage kullanmadan güvenli bir şekilde nesneleri alabilir WaitForChild() .
oyuncuCharacter modeli deneyimde oluşur.
LocalScripts içinde Workspace.Character (StarterCharacterScripts 'dan kopyalanmış) çalıştır.
Deneyiminiz örnek yayını kullanıyorsa ( Workspace.StreamingEnabled ), bazı veya çoğu nesne iş alanına yüklenmedi, bu yüzden iş alanı nesnelerine erişmek için WaitForChild() kullanmak daha da önemli bir güvenlik önlemi haline geliyor.Özellikle, yükleme ve yayın davranışı hakkında ek bilgi için Yayının içinde akış ve Her model için yayın yönlendirme kontrolleri bakınız.
Nesneleri almak
Nesne özelliklerini ve özniteliklerini değiştirmenin ilk adımı, nesneye referans almaktır.En basit çözüm, kodu Gezginde nesnenin bir çocu yapmak ve nesneyi referans olarak kullanmak için script.Parent kullanmaktır.

local sign = script.Parent
Daha evrensel çözüm, nesneyi hizmettenInstance:FindFirstChild()``Class.Instance:WaitForChild() gibi yöntemler kullanarak almaktır.

local ReplicatedStorage = game:GetService("ReplicatedStorage")local signsFolder = ReplicatedStorage:WaitForChild("Signs")local sign = signsFolder:WaitForChild("InteractiveSign")
Özellikleri değiştir
Özelliklere erişmek kolaydır - sadece nesne referansından sonra bir . kullanın - ancak bir modelle çalışıyorsanız, modelin kendisinden değil bireysel bir parça seçmeniz gerekebilir.

local ReplicatedStorage = game:GetService("ReplicatedStorage")local chair = ReplicatedStorage:WaitForChild("Chair")chair.LeftArmRest.Size = Vector3.new(10, 1, 10)
Öznitelikler oluştur
Programatik olarak öznitelik oluşturabilmenize rağmen, daha yaygın çözüm onları Studio kullanıcı arayüzündeki varsayılan değerlerle oluşturmaktır.Sonra, oyuncu eylemlerine yanıt olarak değerlerini değiştirmek için kodları kullanabilirsiniz.

Studio'da öznitelik oluşturma hakkında bilgi için, İstisna öznitelikleri bakın.
Öznitelikleri ayarla
Bir özniteliğin değerini değiştirmek için, bir isim ve değerle Instance:SetAttribute() arayın.
Nitelik oluştur veya değiştir
local cabbage = script.Parentcabbage:SetAttribute("Harvestable", true)
Eğer özellik henüz mevcut değilse, bu yöntem onu oluşturur.
Öznitelik değerlerini alın
Mevcut bir özniteliğin değerini almak için, durumInstance:GetAttribute() çağırın.
Nitelik Değeri Alın
local cabbage = script.Parentcabbage:SetAttribute("Harvestable", true)local isHarvestable = cabbage:GetAttribute("Harvestable")print(isHarvestable) --> true
Benzer şekilde, tüm öznitelikleri çağırarak Instance:GetAttributes() alabilirsiniz. Bu yöntem bir anahtar-değer çiftleri sözlüğü döndürür.
Tüm Öznitelikleri Alın
local cabbage = script.Parentlocal cabbageAttributes = cabbage:GetAttributes()print(cabbageAttributes.GrowthRate) --> 2for k, v in cabbageAttributes doprint(k, v)end
Öznitelikleri silme
Bir özniteliği silmek için, değerini nil olarak ayarlayın.
Özniteliği Silme
local cabbage = script.Parentcabbage:SetAttribute("GrowthRate", nil)
Değişiklikleri algıla
Özellik ve özniteliklerdeki değişiklikleri dinlemenin birkaç yolu vardır:
- The Instance.AttributeChanged etkinliği herhangi bir özniteliğe yapılan değişiklikleri dinler ve değiştirilen özniteliğin adını bir parametre olarak geçer.
- The Instance:GetPropertyChangedSignal() yöntemi, bir özellikteki değişiklikleri dinlemenizi ve herhangi bir parametre geçirmenizi sağlar ve hiçbir parametre geçmez.
- The Instance:GetAttributeChangedSignal() yöntemi, bir özniteliğe yapılan değişiklikleri dinlemenizi ve herhangi bir parametre geçirmenizi sağlar ve hiçbir parametre geçmez.
Bu olayların ve yöntemlerin parametre olarak geçirdiği minimum bilgi nedeniyle, hepsi anonim işlevler için iyi bir uyumdur, özellikle de Instance:GetPropertyChangedSignal() ve Instance:GetAttributeChangedSignal().Anonim işlevler ve olaylarla çalışmayı daha fazla öğrenmek için, Etkinlikler bakın.
Değişiklikleri Dinle
local cabbage = script.Parent
-- Yerel işlevler
local function onAnyPropertyChange(property)
-- Niteliklere yapılan değişiklikleri görmezden gel
if property ~= "Attributes" then
print(property) --> Adı
print(cabbage[property]) --> Kabağ1
end
end
local function onAnyAttributeChange(attribute)
print(attribute) --> Büyüme, Büyüme Oranı
print(cabbage:GetAttribute(attribute)) --> yanlış, 3
end
-- Değişiklikleri dinleyin ve yerel işlevlere bağlanın
cabbage.Changed:Connect(onAnyPropertyChange)
cabbage.AttributeChanged:Connect(onAnyAttributeChange)
-- Değişiklikleri dinleyin ve anonim işlevlere bağlanın
cabbage:GetPropertyChangedSignal("Name"):Connect(function()
print(cabbage.Name) --> Kabağ1
end)
cabbage:GetAttributeChangedSignal("GrowthRate"):Connect(function()
print(cabbage:GetAttribute("GrowthRate")) --> 3
end)
-- Değiştirilen Ateşler ve GetPropertyChangedSignal()
cabbage.Name = "Cabbage1"
-- Değiştirilen Ateşler ve ÖznitelikDeğiştirildi
cabbage:SetAttribute("Grow", false)
-- Ateşler Değiştirildi, Öznitelik Değiştirildi ve GetAttributeChangedSignal()
cabbage:SetAttribute("GrowthRate", 3)