CollectionService
*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.
CollectionService grupları yönetir (koleksiyonlar) durumların etiketleri ile.Etiketler, sunucudan müşteriye yeniden yansıyan örneklere uygulanan dize setleridir.Yerler kaydedildiğinde de serilize edilirler.
CollectionService 'nin birincil kullanımı, davranışlarını genişletmek için kullanabileceğiniz belirli etiketlerle instansları kaydetmektir.Aynı senaryoyu birçok farklı duruma eklediğinizi görürseniz, CollectionService kullanan bir senaryo daha iyi olabilir.
Etiketler bu sınıfın yöntemleri aracılığıyla AddTag() veya RemoveTag() gibi eklenebilir veya kaldırılabilir.Ayrıca, bir durumözelliklerinin Etiketler bölümünde doğrudan yönetilebilir veya dahili Etiket Düzenleyici aracı aracılığıyla yönetilebilir.
Replikasyon
Etiketler yeniden yapıldığında, bir örnekteki tüm etiketler aynı anda yeniden yapılır .Bu nedenle, istemciden bir örneğe bir etiket ayarlarsanız, aynı sunucudan aynı örnek üzerinde farklı bir etiket ekleyin/kaldırın, istemcinin yerel etiketleri üzerinde aynı örnek üzerinde yeniden yazılır.StreamingEnabled yerlerde, örnekler müşterinin yayınlanan alanını terk ettiğinde yükleri kaldırılabilir.Böyle bir örnek yayınlanan alana yeniden girdiğinde, özellikler ve etiketler sunucudan yeniden senkronize edilecektir.Bu, LocalScripts tarafından yapılan değişikliklerin üzerine yazılmasına/kaldırılmasına neden olabilir.
Özet
Özellikler
Yöntemler
Bir etiketi Instance 'ye uygular.
Deneyimdeki tüm etiketlerin bir diziini döndürür.
Verilen bir etiket bir durumeklendiğinde ateşleyen bir sinyal döndürür.
Belirli bir etiket bir durumkaldırıldığında ateşleyen bir sinyali döndürür.
Verilen bir etiketle oyundaki bir dizi instans döndürür.
Verilen bir durumuygulanan tüm etiketlerin bir dizi alınır.
Bir instansın belirli bir etikete sahip olup olmadığını kontrol edin.
Bir durumbir etiketi kaldırır.
Etkinlikler
Bir etiket bir örneğe eklendiğinde ve eklenen etiket o etiketin dünyatek olay olduğunda ateş eder.
Bir etiket bir örnekten kaldırıldığında ve kaldırılan etiket artık herhangi bir dünyakullanılmadığında ateş eder.
Özellikler
Yöntemler
AddTag
Bu yöntem, etiketi bir Instance 'ye uygular ve etiket zaten o durumuygulanıyorsa hiçbir şey yapmaz.Başarıyla bir etiket ekleme, verilen etiketle oluşturulan bir sinyali ateş edecektir: GetInstanceAddedSignal() .
Uyarılar
İstemci tarafından eklenen bir durumetiketi, sunucu daha sonra bu örnek üzerinde bir etiket ekler veya kaldırırsa, sunucu tüm etiketleri bir araya getirir ve önceki etiketleri üzerine yazar.
Bir durumetiket atarken, etiketin işlevini vermek için bazı kaynakların kullanılması yaygındır, örneğin etkinlik bağlantıları veya tablolar.Hafıza sızıntılarını önlemek için, bunları temizlemek (bağlantı kes, nil olarak ayarla, vb.) bir etiket için artık gerekmediğinde iyi bir fikirdir.RemoveTag() , Instance:Destroy() veya GetInstanceRemovedSignal() tarafından döndürülen bir sinyale bağlı bir işlev çağrırken bunu yapın.
Parametreler
Dönüşler
GetInstanceAddedSignal
Bir etiket (dizi) verildiğinde, bu yöntem iki koşul altında ateşlenen bir sinyal döndürür:
Etiket, DataModel kullanarak bir örneğe atanır CollectionService:AddTag() veya Instance:AddTag() .
Verilen etikete sahip bir örnek, örneğin veya benzeri şekilde bir altına eklenir.
Aynı etiketle bu yönteme yapılan sonraki çağrılar aynı sinyal nesnesini geri verir.Ayrıca, zaten bir etikete sahip olan durumların bir listesini almak için GetTagged() 'yi de arayın (ve dolayısıyla olayı ateş etmeyeceklerdir, eğer zaten DataModel içindeler).
Ayrıca bakın GetInstanceRemovedSignal() benzer koşullar altında ateşlenen bir olayı geri gönderen.
Parametreler
İzlenecek etiket.
Dönüşler
Etiketi bir durumeklediğinizde ateşleyen bir olay.
Kod Örnekleri
This code sample causes any BasePart with the tag Deadly to kill any Humanoid that touches it. It does this using a common pattern with CollectionService to listen for all parts with the tag and make a connection, then disconnect the connection when the tag is removed.
local CollectionService = game:GetService("CollectionService")
local tag = "Deadly"
local function onDeadlyPartTouched(otherPart)
if not otherPart.Parent then
return
end
local humanoid = otherPart.Parent:FindFirstChildOfClass("Humanoid")
if humanoid then
humanoid.Health = 0
end
end
-- Save the connections so they can be disconnected when the tag is removed
local connections = {}
local function onInstanceAdded(object)
-- Confirm that the object with this tag is a BasePart
if object:IsA("BasePart") then
connections[object] = object.Touched:Connect(onDeadlyPartTouched)
end
end
local function onInstanceRemoved(object)
-- If there is a stored connection on this object, disconnect/remove it
if connections[object] then
connections[object]:Disconnect()
connections[object] = nil
end
end
-- Listen for this tag being applied to objects
CollectionService:GetInstanceAddedSignal(tag):Connect(onInstanceAdded)
CollectionService:GetInstanceRemovedSignal(tag):Connect(onInstanceRemoved)
-- Also detect any objects that already have the tag
for _, object in pairs(CollectionService:GetTagged(tag)) do
onInstanceAdded(object)
end
GetInstanceRemovedSignal
Bir etiket (dizi) verildiğinde, bu yöntem iki koşul altında ateşlenen bir sinyal döndürür:
Etiket, DataModel kullanarak bir örnekten çıkarılır CollectionService:RemoveTag() veya Instance:RemoveTag() .
Verilen etikete sahip bir örnek, örneğin veya benzeri tarafından bir alt soyut olarak kaldırılır.
Aynı etiketle bu yönteme yapılan sonraki çağrılar aynı sinyal nesnesini geri verir.Sinyal, bir kez etiket kullanan instanslar tarafından kullanılan kaynakları temizlemek için yararlıdır, örneğin bağlantıları koparmak.
Ayrıca bakın GetInstanceAddedSignal() benzer koşullar altında ateşlenen bir olayı geri gönderen.
Parametreler
İzlenecek etiket.
Dönüşler
Etiketi bir durumkaldırdığınızda ateşleyen bir olay.
Kod Örnekleri
This code sample causes any BasePart with the tag Deadly to kill any Humanoid that touches it. It does this using a common pattern with CollectionService to listen for all parts with the tag and make a connection, then disconnect the connection when the tag is removed.
local CollectionService = game:GetService("CollectionService")
local tag = "Deadly"
local function onDeadlyPartTouched(otherPart)
if not otherPart.Parent then
return
end
local humanoid = otherPart.Parent:FindFirstChildOfClass("Humanoid")
if humanoid then
humanoid.Health = 0
end
end
-- Save the connections so they can be disconnected when the tag is removed
local connections = {}
local function onInstanceAdded(object)
-- Confirm that the object with this tag is a BasePart
if object:IsA("BasePart") then
connections[object] = object.Touched:Connect(onDeadlyPartTouched)
end
end
local function onInstanceRemoved(object)
-- If there is a stored connection on this object, disconnect/remove it
if connections[object] then
connections[object]:Disconnect()
connections[object] = nil
end
end
-- Listen for this tag being applied to objects
CollectionService:GetInstanceAddedSignal(tag):Connect(onInstanceAdded)
CollectionService:GetInstanceRemovedSignal(tag):Connect(onInstanceRemoved)
-- Also detect any objects that already have the tag
for _, object in pairs(CollectionService:GetTagged(tag)) do
onInstanceAdded(object)
end
GetTagged
Bu yöntem, DataModel 'in soyundakileri olan bir dizi istisna döndürür etiketli bir dizi.Bir etiketi CollectionService:RemoveTag() veya Instance:RemoveTag() kullanarak kaldırmak, bu yöntemin onları geri vermediğinden emin olur.
Bir etiketle tüm örnekleri tespit etmek istiyorsanız, her ikisi de ve geleceği sunuyor ve ayrıca GetInstanceAddedSignal() tarafından döndürülen bir sinyala bağlantı kurarken bu yöntemi kullanarak örnekler üzerinde döngü yapın.
Bu yöntem döndürülen örneklerin herhangi bir sıralanmasını garanti etmez.Ayrıca, durumların verilen etikete sahip olması ancak DataModel 'in bir altı olmaması mümkündür, örneğin ebeveyni nil ; bu yöntem böyle durumları geri getirmeyecektir.
Parametreler
Aranacak etiket.
Dönüşler
Etiketle tüm örneklerin bir dizi.
Kod Örnekleri
This code sample causes any BasePart with the tag Deadly to kill any Humanoid that touches it. It does this using a common pattern with CollectionService to listen for all parts with the tag and make a connection, then disconnect the connection when the tag is removed.
local CollectionService = game:GetService("CollectionService")
local tag = "Deadly"
local function onDeadlyPartTouched(otherPart)
if not otherPart.Parent then
return
end
local humanoid = otherPart.Parent:FindFirstChildOfClass("Humanoid")
if humanoid then
humanoid.Health = 0
end
end
-- Save the connections so they can be disconnected when the tag is removed
local connections = {}
local function onInstanceAdded(object)
-- Confirm that the object with this tag is a BasePart
if object:IsA("BasePart") then
connections[object] = object.Touched:Connect(onDeadlyPartTouched)
end
end
local function onInstanceRemoved(object)
-- If there is a stored connection on this object, disconnect/remove it
if connections[object] then
connections[object]:Disconnect()
connections[object] = nil
end
end
-- Listen for this tag being applied to objects
CollectionService:GetInstanceAddedSignal(tag):Connect(onInstanceAdded)
CollectionService:GetInstanceRemovedSignal(tag):Connect(onInstanceRemoved)
-- Also detect any objects that already have the tag
for _, object in pairs(CollectionService:GetTagged(tag)) do
onInstanceAdded(object)
end
GetTags
Bir Instance verildiğinde, bu yöntem, durumuygulanan etiketlere sahip bir dizi dize döndürür.
Bu yöntem, aynı anda birden fazla etiketle bir şey yapmak istediğinizde yararlıdır, ancak tek bir etiketin varlığını kontrol etmek verimsizdir.Bunun için, tek bir etiket kontrol etmek için HasTag() kullanın.
Parametreler
Etiketlerinin geri gönderilmesi gereken örnek.
Dönüşler
Verilen durumuygulanan etiketlerden oluşan bir dizi.
Kod Örnekleri
This code sample demonstrates adding, removing and querying a tag from an object using CollectionService.
local CollectionService = game:GetService("CollectionService")
local Workspace = game:GetService("Workspace")
local object = Workspace.Part
-- Add a tag
CollectionService:AddTag(object, "Deadly")
-- Query for a tag
if CollectionService:HasTag(object, "Deadly") then
print(object:GetFullName() .. " is deadly")
end
-- List tags on an object
local tags = CollectionService:GetTags(object)
print("The object " .. object:GetFullName() .. " has tags: " .. table.concat(tags, ", "))
-- Remove a tag
CollectionService:RemoveTag(object, "Deadly")
HasTag
Bu yöntem, belirli bir Instance 'nın bir etikete sahip olup olmadığını döndürür.
Genişletilmiş olarak, bir örnek üzerinde GetTags() 'a yapılan bir çağrı tarafından döndürülen herhangi bir etiket, bu yöntemle kullanıldığında true dönecektir.
Parametreler
Bir etiketin varlığını kontrol etmek için örnek.
Kontrol edilecek etiket.
Dönüşler
İstisna etiketine sahip olup olmadığı.
Kod Örnekleri
This code sample demonstrates adding, removing and querying a tag from an object using CollectionService.
local CollectionService = game:GetService("CollectionService")
local Workspace = game:GetService("Workspace")
local object = Workspace.Part
-- Add a tag
CollectionService:AddTag(object, "Deadly")
-- Query for a tag
if CollectionService:HasTag(object, "Deadly") then
print(object:GetFullName() .. " is deadly")
end
-- List tags on an object
local tags = CollectionService:GetTags(object)
print("The object " .. object:GetFullName() .. " has tags: " .. table.concat(tags, ", "))
-- Remove a tag
CollectionService:RemoveTag(object, "Deadly")
RemoveTag
Bu yöntem, bir durumbir etiketi kaldırır. Başarıyla bir etiketi kaldırmak, verilen etiketle GetInstanceRemovedSignal() tarafından oluşturulan bir sinyali ateş edecektir.
Bir etiketi kaldırırken, etiketin işlevini vermek için bazı kaynakların kullanılması yaygındır, örneğin etkinlik bağlantıları veya tablolar.Hafıza sızıntılarını önlemek için, bunları temizlemek (bağlantı kes, nil olarak ayarla, vb.) bir etiket için artık gerekmediğinde iyi bir fikirdir.
Parametreler
Etiketi kaldırmak için örnek.
Instansdan kaldırılacak etiket.
Dönüşler
Kod Örnekleri
This code sample demonstrates adding, removing and querying a tag from an object using CollectionService.
local CollectionService = game:GetService("CollectionService")
local Workspace = game:GetService("Workspace")
local object = Workspace.Part
-- Add a tag
CollectionService:AddTag(object, "Deadly")
-- Query for a tag
if CollectionService:HasTag(object, "Deadly") then
print(object:GetFullName() .. " is deadly")
end
-- List tags on an object
local tags = CollectionService:GetTags(object)
print("The object " .. object:GetFullName() .. " has tags: " .. table.concat(tags, ", "))
-- Remove a tag
CollectionService:RemoveTag(object, "Deadly")