Özellikler ve öznitelikler

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

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:

  1. Müşteri, yüklenme ekranı, varlıklar ve senaryolar gibi ReplicatedFirst içeriğini yükler.

  2. (ve ile ) çalıştırılırken.Bu senaryolar, ReplicatedFirst kullanmadan güvenle nesneleri alabilir: WaitForChild()


    -- Güvenli
    local 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ğil
    local 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.

  3. Müşteri deneyimin geri kalanını yüklemeye devam ediyor.

  4. Bitince, game.Loaded etkinliği ateşlenir ve game:IsLoaded() geri döner true.

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

  6. oyuncuCharacter modeli deneyimde oluşur.

  7. 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.

A script parented to a model in the Explorer.

local sign = script.Parent

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

A Model within a Folder in ReplicatedStorage.

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.

A Model within ReplicatedStorage.

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.

A script within a folder in ReplicatedStorage.

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.Parent
cabbage: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.Parent
cabbage: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.Parent
local cabbageAttributes = cabbage:GetAttributes()
print(cabbageAttributes.GrowthRate) --> 2
for k, v in cabbageAttributes do
print(k, v)
end

Öznitelikleri silme

Bir özniteliği silmek için, değerini nil olarak ayarlayın.

Özniteliği Silme

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