Deneyimleri etkileşimli hale getirmek genellikle nesne özelliklerini ve özelliklerini 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 fizikleri kontrol eder. Bir izci ve alan deneyiminde, bir diskin veya javelin'in anında yolculuğunu gösteren bir görsel göstergesi olması gerekir.
Özellikler temel olarak tanımladığınız özel özelliklerdir. Örneğin, Bitki referans projesi, satın alma fiyatını için tohumlar ve potun maksimum bitki büyüklüğünü belirlemek için özellikleri kullanır.
Replikasyon Sırası
Nesneleri alıp düzenlemeye başlamadan önce, replikasyon sırasının farkında olmalısınız.
Roblox motoru, nesnelerin sunucudan klientine replikasyonunun sırasını garanti etmez, bu da Instance:WaitForChild() yöntemini kullanıcı kaynaklı nesneler için erişim için gereklilik kılar. Ancak, işlemle ilgili bazı yönlendirmeler öngörülebilir:
Class.ReplicatedFirst içeriklerini, yükleme ekranı, varlık ve kodlar gibi içerir.
Class.LocalScript|LocalScripts (ve Scripts ile bir RunContext içinde) 在 0> ReplicatedFirst0> run. Bu skripte, LocalScripts3> kullan
-- Güvenlilocal ReplicatedFirst = game:GetService("ReplicatedFirst")local LoadingScreen = require(ReplicatedFirst.LoadingScreen)
Bu yazılımlar güvenli olarak başka bir hizmetden öğeler alabilirler, çünkü henüz yüklenmediyse:
-- Güvenli değillocal ReplicatedStorage = game:GetService("ReplicatedStorage")local PickupManager = require(ReplicatedStorage.PickupManager)
Bu kodların çoğu, diğer hizmetlerden nesiller almak için WaitForChild() kullanabilirsiniz, ancak bunu yapmak WaitForChild() kullanımının çoğu yönünü olumsuz yönde etkiler.
Klient deneyimin geri kalanını yüklemekte devam eder.
Bittiğinde, game.Loaded etkinliği başlar ve game:IsLoaded() geri döndüğünde doğru.
LocalScripts 在 StarterPlayerScripts 运行, 还包括客户端的 Scripts 在 0> Class.ReplicatedStorage0> 。 这些脚本可以安全地从 3> StarterPlayerScripts3> 和 LocalScripts6> 中
oyuncuCharacter modeli deneyimde oluşturulur.
LocalScripts in StarterCharacterScripts run.
Eğer deneyiminiz istemci akışını kullanır ( Workspace.StreamingEnabled), bazı veya tüm nesneleri çalışma alanına yüklemeyebilir, bu yüzden 1>Çocuk oluşturma1> ile çalışma alanına
Nesneleri Alınıyor
Nesne özelliklerini ve özniteliklerini değiştirmenin ilk adımı, nesneye bir referans almaktır. En basit çözüm, Explorer'da nesnenin bir çocuğu yapmak ve script.Parent kullanarak nesneye bir referans yapmaktır.
local sign = script.Parent
Daha genel çözüm, bir hizmet kullanarak nesneyi almak olmalıdır. Bunu yapmak için yöntemleri kullanın, örneğin Instance:FindFirstChild() veya Instance:WaitForChild() .
local ReplicatedStorage = game:GetService("ReplicatedStorage")local signsFolder = ReplicatedStorage:WaitForChild("Signs")local sign = signsFolder:WaitForChild("InteractiveSign")
Özellikleri Değiştirme
Özellikleri erişmek kolaydır - sadece bir . öğe referinden sonra kullanın - ancak bir modelle çalışıyorsanız, modelin kendisi değil bir bireysel parçayı seçmeniz gerekebilir.
local ReplicatedStorage = game:GetService("ReplicatedStorage")local chair = ReplicatedStorage:WaitForChild("Chair")chair.LeftArmRest.Size = Vector3.new(10, 1, 10)
Özellikler Oluşturuluyor
Özellikleri programatik olarak oluşturabilirsiniz, ancak en yaygın çözüm, onları Studio kullanıcı arayüzünde varsayılan değerlerle oluşturmaktır. Sonra kullanıcı eylemlerine yanıt olarak onları değiştirmek için kullanabilirsiniz kodları.
Stüdyo'da özellikler oluşturma konusunda bilgi için Özellikleri Oluşturma bakın.
Özellikleri Ayarlama
Bir özelliğin değerini değiştirmek için, bir isim ve değerle Instance:SetAttribute() çağırın.
Özellik Oluşturma veya Değiştirme
local cabbage = script.Parentcabbage:SetAttribute("Harvestable", true)
Eğer özellik mevcut değilse, bu yöntem onu oluşturur.
Özellik Değerleri Alınıyor
Mevcut bir özelliğin değerini almak için, Instance:GetAttribute() onun durumçağır.
Özellik Değerini Al
local cabbage = script.Parentcabbage:SetAttribute("Harvestable", true)local isHarvestable = cabbage:GetAttribute("Harvestable")print(isHarvestable) --> true
Benzer şekilde, tüm özellikleri çağırmak için Instance:GetAttributes() 를 arayarak alabilirsiniz. Bu yöntem bir dizi anahtar değer çifti döndürür.
Tüm Özellikleri Al
local cabbage = script.Parentlocal cabbageAttributes = cabbage:GetAttributes()print(cabbageAttributes.GrowthRate) --> 2for k, v in cabbageAttributes doprint(k, v)end
Özellikleri Silme
Bir özelliği silmek için, değerini yok olarak ayarla.
Özelliği Sil
local cabbage = script.Parentcabbage:SetAttribute("GrowthRate", nil)
Değişiklikleri Tespit Etme
Özelliklerin ve özniteliklerin değişikliklerini dinlemek için birkaç yol vardır:
Değişiklikleri herhangi bir özellik (özellikler dahil) için dinler ve değiştirilen özellik ismini bir parametre olarak geçer.
Class.Instance.AttributeChanged etkinliği herhangi bir özelliğin değişmesini dinler ve değiştirilen özelliğin adını bir parametre olarak geçer.
Class.Instance:GetPropertyChangedSignal() yöntemi, bir özelliğin değişmesini dinler ve hiçbir parametre vermez.
Class.Instance:GetAttributeChangedSignal() yöntemi, bir özelliğin değişmesini dinler ve hiçbir parametre vermez.
Bu olaylar ve metodlar minimum bilgiyi geçerken değiştirici olarak, hepsi anonim işlevler için iyi uyumludur, özellikle Instance:GetPropertyChangedSignal() ve Instance:GetAttributeChangedSignal() . Anonim işlevler ve etkinleştiriciler hakkında daha fazla bilgi için Etkinlikler bakın.
Değişiklikleri Dinle
local cabbage = script.Parent
-- Yerel işlevler
local function onAnyPropertyChange(property)
-- Özelliklere değiştirilmeyen değerleri ignor et
if property ~= "Attributes" then
print(property) --> İsim
print(cabbage[property]) --> Cabbag1
end
end
local function onAnyAttributeChange(attribute)
print(attribute) --> Büyüme, BüyümeOranı
print(cabbage:GetAttribute(attribute)) --> false, 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) --> Cabbag1
end)
cabbage:GetAttributeChangedSignal("GrowthRate"):Connect(function()
print(cabbage:GetAttribute("GrowthRate")) --> 3
end)
-- Değiştirilen Ateşleri ve GetPropertyChangedSignal()
cabbage.Name = "Cabbage1"
-- Değiştirilen Ateşler ve ÖzellikDeğiştirildi
cabbage:SetAttribute("Grow", false)
-- Değiştirilen Ateşler, AttributeChanged ve GetAttributeChangedSignal()
cabbage:SetAttribute("GrowthRate", 3)