CollectionService
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
CollectionService gestisce i gruppi (lezioni) delle istanze con tag . I tag sono set di stringhe applicate agli oggetti che si replica dal server al client. Sono anche serializzati quando i luoghi vengono salvati.
L'uso principale di CollectionService è registrare istanze con tag specifici che puoi utilizzare per estendere il loro comportamento. Se ti trovi a aggiungere lo stesso script a molti oggetti diversi, forse uno script che utilizza CollectionService sarebbe meglio.
I tag possono essere aggiunti o rimossi tramite i metodi di questa classe come AddTag() o RemoveTag() . Possono anche essere gestiti direttamente in Studio attraverso la sezione Tag delle proprietà di un'esempio, o attraverso lo strumento 1> Tag Editor1> incorporato.
Replicazione
Quando le etichette si replicano, tutte le etichette su un oggetto si replicano allo stesso tempo . Quindi, se impostate un'etichetta su un oggetto dal
Sommario
Proprietà
Metodi
Applica un tag a un Instance .
Restituisce un segnale che si attiva quando viene aggiunto un tag a un oggetto.
Restituisce un segnale che si attiva quando viene rimosso un tag specifico da un'esempio.
Restituisce un array di oggetti nel gioco con un tag specificato.
Ottiene un array di tutti i tag applicati a un determinato oggetto.
Controlla se un oggetto ha un tag specificato.
Rimuove un tag da un'esempio.
Eventi
Si attiva quando viene aggiunto un tag a un oggetto e il tag aggiunto è l'unica occorrenza di quel tag nel Posto.
Si attiva quando viene rimosso un tag da un oggetto e il tag rimosso non viene più utilizzato da nessuna parte nel Posto.
Proprietà
Metodi
AddTag
AddTag will apply a tag to an Instance , doing nothing if the tag is already applied to the esempio. Successfully adding a tag will fire a signal created by CollectionService:GetInstanceAddedSignal() with the given tag.
Avviso: Quando si etichetta un'istanza, è comune che alcune risorse siano utilizzate per dare la funzionalità dell'istanza, ad esempio connessioni di eventi o tabelle. Per prevenire le perdite di memoria, è una buona idea pulire queste up (disconetti, imposta
Parametri
Restituzioni
GetInstanceAddedSignal
GetInstanceAdded viene fornito un tag (una Stringa) e restituisce un segnale che si attiva in due condizioni:
- Il tag viene assegnato a un'istanza all'interno di DataModel (Gioco) utilizzando CollectionService:AddTag() o Instance:AddTag() .
- Un'istanza con il tag specificato viene aggiunta come discendente del DataModel , ad esempio impostando Instance.Parent o simile.
Le chiamate successive a questo metodo con lo stesso tag restituiscono lo stesso oggetto segnale. Considere anche di chiamare CollectionService:GetTagged() per ottenere una lista di oggetti che hanno già un tag (e quindi non attivano l'evento se sono già in DataModel ).
Vedi anche CollectionService:GetInstanceRemovedSignal() , che restituisce un evento che si attiva in condizioni simili.
Parametri
Il tag per guardare.
Restituzioni
Un evento che si attiva quando aggiungi il tag a un'esempio.
Campioni di codice
local CollectionService = game:GetService("CollectionService")
local tag = "Deadly"
local function onDeadlyPartTouched(otherPart)
if not otherPart.Parent then
return
end
local human = otherPart.Parent:FindFirstChildOfClass("Humanoid")
if human then
human.Health = 0
end
end
-- Save the connections so they can be disconnected when the tag is removed
-- This table maps BaseParts with the tag to their Touched connections
local connections = {}
local function onInstanceAdded(object)
-- Remember that any tag can be applied to any object, so there's no
-- guarantee 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 we made a connection on this object, disconnect it (prevent memory leaks)
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
GetInstanceRemoved ha un tag (una Stringa) e restituisce un segnale che si attiva sotto due condizioni:
- Il tag viene rimosso da un'istanza all'interno di DataModel (Gioco) utilizzando CollectionService:RemoveTag() o Instance:RemoveTag() .
- Un'istanza con il tag specificato viene rimossa come discendente del DataModel , ad esempio disattivando Instance.Parent o simile.
Le chiamate successive a questo metodo con lo stesso tag restituiscono lo stesso oggetto segnale. Il segnale è utile per pulire le risorse utilizzate dagli oggetti che una volta avevano i tag, come la disconnessione delle connessioni.
Vedi anche CollectionService:GetInstanceAddedSignal() , che restituisce un evento che si attiva in condizioni simili.
Parametri
Il tag per guardare.
Restituzioni
Un evento che si attiva quando rimuovi il tag da un'esempio.
Campioni di codice
local CollectionService = game:GetService("CollectionService")
local tag = "Deadly"
local function onDeadlyPartTouched(otherPart)
if not otherPart.Parent then
return
end
local human = otherPart.Parent:FindFirstChildOfClass("Humanoid")
if human then
human.Health = 0
end
end
-- Save the connections so they can be disconnected when the tag is removed
-- This table maps BaseParts with the tag to their Touched connections
local connections = {}
local function onInstanceAdded(object)
-- Remember that any tag can be applied to any object, so there's no
-- guarantee 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 we made a connection on this object, disconnect it (prevent memory leaks)
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
GetTagged restituisce un array di oggetti con un tag specificato che sono discendenti del DataModel ( game ). Tali tag sono stati aggiunti utilizzando CollectionService:AddTag() , e rimuov
Se vuoi rilevare tutti gli oggetti con un tag, sia presenti che futuri, usa questo metodo per itere sui singoli oggetti mentre crei anche una connessione a un segnale restituito da CollectionService.GetInstanceAddedSignal .
Questo metodo non garantisce alcun ordine degli oggetti restituiti. Inoltre, è possibile che gli oggetti possano avere il tag assegnato, ma non essere discendenti del DataModel , cioè il suo padre è zero. Questo metodo non restituirà tali oggetti.
Parametri
Il tag per cercare.
Restituzioni
Un array di tutte le istanze con il tag.
Campioni di codice
local CollectionService = game:GetService("CollectionService")
local tag = "Deadly"
local function onDeadlyPartTouched(otherPart)
if not otherPart.Parent then
return
end
local human = otherPart.Parent:FindFirstChildOfClass("Humanoid")
if human then
human.Health = 0
end
end
-- Save the connections so they can be disconnected when the tag is removed
-- This table maps BaseParts with the tag to their Touched connections
local connections = {}
local function onInstanceAdded(object)
-- Remember that any tag can be applied to any object, so there's no
-- guarantee 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 we made a connection on this object, disconnect it (prevent memory leaks)
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
GetTags ottiene un'istanza e restituisce un array di stringhe, che sono le etichette applicate all'oggetto fornito.
local CollectionService = game:GetService("CollectionService")local object = workspace.Modellocal tags = CollectionService:GetTags(object)print("The object " .. object:GetFullName() .. " has tags: " .. table.concat(tags, ", "))
Questo metodo è utile quando vuoi fare qualcosa con più tag contemporaneamente su un oggetto. Tuttavia, sarebbe inefficiente utilizzare questo metodo per controllare l'esistenza di un singolo tag. Per questo, usa CollectionService:HasTag() per controllare per l'esistenza di un singolo tag.
Parametri
L'oggetto cui i suoi tag devono essere restituiti.
Restituzioni
Un array di stringhe che sono le etichette applicate all'oggetto fornito.
Campioni di codice
local CollectionService = game:GetService("CollectionService")
local object = script.Parent.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
HasTag restituisce se un oggetto specifico ha un tag.
- L'uso di CollectionService:AddTag() per aggiungere il tag farà si che questo metodo restituisca vero.
- Usando CollectionService:RemoveTag() per rimuovere il tag, questo metodo restituirà false.
Per estensione, qualsiasi tag restituito da un call to CollectionService:GetTags() su un oggetto restituirà true quando viene utilizzato con questo metodo.
Parametri
L'istanza per controllare la presenza di un tag.
Il tag per controllare.
Restituzioni
Se l'istanza ha il tag.
Campioni di codice
local CollectionService = game:GetService("CollectionService")
local object = script.Parent.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
RemoveTag rimuoverà un tag da un'esempio. Questo metodo non mostrerà un errore se l'oggetto non aveva il tag in primo Posto. Il metodo di rimozione del tag rimuoverà con successo un segnale creato da CollectionService:GetInstanceRemovedSignal() con il tag specificato.
Quando si rimuove un tag, è comune che alcune risorse siano utilizzate per fornire la funzionalità del tag, ad esempio connessioni di eventi o tabelle. Per prevenire le perdite di memoria, è una buona idea pulire queste (disconetti, imposta a zero, ecc.) quando non sono più necessarie per un tag.
Parametri
Restituzioni
Campioni di codice
local CollectionService = game:GetService("CollectionService")
local object = script.Parent.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")
Eventi
TagAdded
Questo evento si attiva quando viene aggiunto un tag a un oggetto e il tag aggiunto è l'unica occorrenza di quel tag nel Posto.
Parametri
TagRemoved
Questo evento si attiva quando viene rimosso un tag da un oggetto e il tag rimosso non viene più utilizzato da nessuna parte nel Posto.