CollectionService

Pokaż przestarzałe

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Brak możliwości tworzenia
Usługa

CollectionService zarządza grupami ( kolekcjami ) instancji z tagami .Tagi to zestawy strun zastosowane do instancji, które replikują się z serwera na klienta.Są one również serjalizowane, gdy miejsca są zapisywane.

Głównym zastosowaniem CollectionService jest rejestracja instancji z określonymi tagami, których możesz użyć do rozszerzenia ich zachowania.Jeśli dodajesz ten sam skrypt do wielu różnych instancji, skrypt, który używa CollectionService, może być lepszy.

Tagi mogą być dodane lub usunięte za pomocą metod klasy takich jak AddTag() lub RemoveTag().Można je również zarządzać bezpośrednio w Studio za pomocą sekcji Tagi właściwości instancji lub za pomocą wbudowanego narzędzia Edytor Tagów.

Replikacja

Gdy tagi się powielają, wszystkie tagi na instancji powielają się jednocześnie .Dlatego, jeśli ustawisz tag na instancji z klienta, a następnie dodasz/usuniesz różny tag na tej samej instancji z serwera, lokalne tagi klienta na instancji zostaną nadpisane.W StreamingEnabled miejscach instancje mogą zostać rozładowane, gdy opuszczą obszar przesyłany przez klienta.Jeśli taka instancja ponownie wchodzi do przesyłanego obszaru, właściwości i tagi zostaną ponownie zsynchronizowane z serwerem.Może to spowodować, że zmiany wprowadzone przez LocalScripts zostaną nadpisane/usunięte.

Podsumowanie

Metody

Zdarzenia

  • Wystrzeliwuje, gdy dodany zostanie tag do instancji i dodany tag jest jedynym wystąpieniem tego tagu na miejsce.

  • Wypala się, gdy tag zostanie usunięty z instancji i usunięty tag nie jest już używany nigdzie w miejsce.

Właściwości

Metody

AddTag

()

Ta metoda stosuje tag do Instance, nie wykonując nic, jeśli tag został już zastosowany do tej instancja.Pomyślne dodanie tagu uruchomi sygnał stworzony przez GetInstanceAddedSignal() z danym tagiem.

Powiadomienia
  • Tagi instancji dodane po stronie klienta zostaną usunięte, jeśli serwer później dodaje lub usuwa tag na tej instancji, ponieważ serwer replikuje wszystkie tagi razem i zastępuje poprzednie tagi.

  • Podczas oznaczania instancjajest powszechne, że niektóre zasoby są używane do nadania tagowi jego funkcjonalności, na przykład połączenia z wydarzeniami lub tablice.Aby zapobiec wyciekom pamięci, dobrym pomysłem jest oczyszczenie ich (odłączenie, ustawienie na nil itp.), gdy nie są już potrzebne do tagu.Zrób to, gdy dzwonisz RemoveTag() , dzwonisz Instance:Destroy() lub w funkcji połączonej z sygnałem zwróconym przez GetInstanceRemovedSignal() .

Parametry

instance: Instance
Wartość domyślna: ""
tag: string
Wartość domyślna: ""

Zwroty

()

GetAllTags

Zapis równoległy

Zwraca tablicę wszystkich tagów w doświadczeniu.


Zwroty

GetInstanceAddedSignal

Biorąc pod uwagę tag (ciąg), metoda ta zwraca sygnał, który wystrzeliwuje się w dwóch warunkach:

Następne wezwania do tej metody z tym samym tagiem zwracają ten sam obiekt sygnału.Rozważ również wezwanie GetTagged() aby uzyskać listę instancji, które już mają tag (a zatem nie uruchomią wydarzenia, jeśli już są w DataModel ).

Zobacz także GetInstanceRemovedSignal(), który zwraca wydarzenie, które wystrzeliwuje w podobnych warunkach.

Parametry

tag: string

Tag do obserwowania.

Wartość domyślna: ""

Zwroty

Wydarzenie, które wystrzeliwuje się, gdy dodasz tag do instancja.

Przykłady kodu

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.

Deadly Bricks using CollectionService

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

Biorąc pod uwagę tag (ciąg), metoda ta zwraca sygnał, który wystrzeliwuje się w dwóch warunkach:

Następne wezwania do tej metody z tym samym tagiem zwracają ten sam obiekt sygnału.Sygnał jest przydatny do czyszczenia zasobów używanych przez instancje, które kiedyś miały tagi, takie jak odłączanie połączeń.

Zobacz także GetInstanceAddedSignal(), który zwraca wydarzenie, które wystrzeliwuje w podobnych warunkach.

Parametry

tag: string

Tag do obserwowania.

Wartość domyślna: ""

Zwroty

Wydarzenie, które wystrzeliwuje się, gdy usuniesz tag z instancja.

Przykłady kodu

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.

Deadly Bricks using CollectionService

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

Instances
Zapis równoległy

Ta metoda zwraca tablicę instancji z danym tagiem, które są potomkami DataModel.Usuwanie tagu za pomocą CollectionService:RemoveTag() lub Instance:RemoveTag() gwarantuje, że metoda ta ich nie zwraca.

Jeśli chcesz wykryć wszystkie instancje z tagiem, oba przedstawiają i przyszłość, użyj tej metody, aby przeszukiwać instancje, jednocześnie nawiązując połączenie z sygnałem zwróconym przez GetInstanceAddedSignal() .

Ta metoda nie gwarantuje żadnego sortowania zwróconych instancji.Ponadto możliwe jest, że instancje mogą mieć przypisany daną tag, ale nie będą potomkami DataModel, na przykład ich rodzicem jest nil ; ta metoda nie zwróci takich instancji.

Parametry

tag: string

Tag do wyszukiwania.

Wartość domyślna: ""

Zwroty

Instances

Zbiór wszystkich instancji z tagiem.

Przykłady kodu

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.

Deadly Bricks using CollectionService

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

Zapis równoległy

Biorąc pod uwagę Instance, metoda ta zwraca tablicę znaków, które są tagami zastosowanymi do instancja.

Ta metoda jest przydatna, gdy chcesz zrobić coś z wieloma tagami instancji naraz, ale nieefektywne jest sprawdzanie istnienia pojedynczego tagu.Do tego użyj HasTag(), aby sprawdzić pojedynczą etykietę.

Parametry

instance: Instance

Instancja, której tagi należy zwrócić.

Wartość domyślna: ""

Zwroty

Zbiór strun, które są tagami zastosowanymi do danego instancja.

Przykłady kodu

This code sample demonstrates adding, removing and querying a tag from an object using CollectionService.

Using Tags and 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

Zapis równoległy

Ta metoda zwraca, czy dany Instance ma tag.

Rozszerzając, każde tagi zwracane przez wezwanie do GetTags() na instancji zwrócą true podczas użycia tej metody.

Parametry

instance: Instance

Instancja do sprawdzenia obecności tagu.

Wartość domyślna: ""
tag: string

Tag do sprawdzenia.

Wartość domyślna: ""

Zwroty

Czy instancja ma tag.

Przykłady kodu

This code sample demonstrates adding, removing and querying a tag from an object using CollectionService.

Using Tags and 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

()

Ta metoda usuwa tag z instancja. Pomyślne usunięcie tagu uruchomi sygnał stworzony przez GetInstanceRemovedSignal() z danym tagiem.

Podczas usuwania tagu jest powszechne, że niektóre zasoby są używane do nadania tagowi jego funkcjonalności, na przykład połączenia z wydarzeniami lub tablice.Aby zapobiec wyciekom pamięci, dobrym pomysłem jest oczyszczenie ich (odłączenie, ustawienie na nil itp.), gdy nie są już potrzebne do tagu.

Parametry

instance: Instance

Instancja, z której należy usunąć tag.

Wartość domyślna: ""
tag: string

Tag do usunięcia z instancja.

Wartość domyślna: ""

Zwroty

()

Przykłady kodu

This code sample demonstrates adding, removing and querying a tag from an object using CollectionService.

Using Tags and 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")

Zdarzenia

TagAdded

To wydarzenie wystrzeliwuje się, gdy dodano tag do instancji i dodany tag jest jedynym wystąpieniem tego tagu na miejsce.

Parametry

tag: string

TagRemoved

To wydarzenie wystrzeliwuje się, gdy tag zostanie usunięty z instancji i usunięty tag nie jest już używany nigdzie w miejsce.

Parametry

tag: string