CollectionService

Mostrar obsoleto

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

No creable
Servicio

CollectionService administra grupos (colecciones) de instancias con etiquetas . Las etiquetas son conjuntos de cadenas aplicadas a los objetos que se replican desde el servidor al cliente. También son serializadas cuando se guardan los lugares.

El uso principal de CollectionService es registrar instancias con etiquetas específicas que puedes usar para extender su comportamiento. Si te encuentras agregando el mismo script a muchos objetos diferentes, tal vez un script que usa CollectionService sería mejor.

Las etiquetas se pueden agregar o eliminar a través de los métodos de esta clase, como AddTag() o RemoveTag(). También se pueden administrar directamente en Studio a través de la sección Etiquetas de las propiedades de una instancia, o a través de la herramienta de 1>Editor de etiquetas</

Replicación

Cuando las etiquetas se replican, todas las etiquetas en un objeto se replican al mismo tiempo . Por lo tanto, si estableces una etiqueta en un objeto desde el cliente,

Resumen

Métodos

Eventos

  • Se activa cuando se agrega una etiqueta a un objeto y la etiqueta agregada es la única ocasión de esa etiqueta en el lugar.

  • Se activa cuando se elimina una etiqueta de un objeto y la etiqueta eliminada ya no se usa en ninguna parte del lugar.

Propiedades

Métodos

AddTag

void

AddTag aplicará una etiqueta a un Instance , no haciendo nada si la etiqueta ya se ha aplicado a la instancia. El éxito de añadir una etiqueta se activará con el lanzamiento de un mensaje creado por CollectionService:GetInstanceAddedSignal() con la etiqueta proporcionada.

Atención/advertencia: Cuando se etiqueta una instancia, es común que se utilicen algunos recursos para proporcionar la funcionalidad de la etiqueta, como conexiones de eventos o tablas. Para evitar fugas de memoria, es una buena idea limpiar estos (desconectar, establecer a

Parámetros

instance: Instance
tag: string

Devuelve

void

GetAllTags

Escribir paralelo

Devuelve

GetInstanceAddedSignal

GetInstanceAdded se da una etiqueta (una cadena) y devuelve un mensaje que se activa bajo dos condiciones:

Las siguientes llamadas a este método con la misma etiqueta devuelven el mismo objeto de señal. Considere también llamar CollectionService:GetTagged() para obtener una lista de objetos que ya tienen una etiqueta (y por lo tanto no disparar el evento si ya están en el DataModel ).

También se vea CollectionService:GetInstanceRemovedSignal(), que devuelve un evento que se activa bajo condiciones similares.

Parámetros

tag: string

La etiqueta para mirar.


Devuelve

Un evento que se activa cuando agregas la etiqueta a una instancia.

Muestras de código

Deadly Bricks using CollectionService

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 tiene una etiqueta (una cadena) y devuelve una señal que se activa bajo dos condiciones:

Las llamadas siguientes a este método con la misma etiqueta devuelven el mismo objeto de señal. La señal es útil para limpiar los recursos utilizados por los objetos que una vez tenían etiquetas, como desconectar conexiones.

También se vea CollectionService:GetInstanceAddedSignal(), que devuelve un evento que se activa bajo condiciones similares.

Parámetros

tag: string

La etiqueta para mirar.


Devuelve

Un evento que se activa cuando eliminas la etiqueta de una instancia.

Muestras de código

Deadly Bricks using CollectionService

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

Instances
Escribir paralelo

GetTagged返回一个拥有指定标签的对象阵列,其子是DataModel (game). Estos tags se han agregado使用CollectionService:AddTag(),并使用1>Class.CollectionService

Si desea detectar todos los objetos con una etiqueta, tanto los presentes como los futuros, use este método para repasar los objetos mientras también se hace una conexión a un señal devuelta por CollectionService.GetInstanceAddedSignal .

Este método no garantiza ninguna orden de los objetos devueltos. Además, es posible que los objetos puedan tener la etiqueta asignada a ellos, pero no ser un descendiente del DataModel , es decir, su padre es nulo. Este método no devolverá tales objetos.

Parámetros

tag: string

La etiqueta para buscar.


Devuelve

Instances

Un arreglo de todas las instancias con el tag.

Muestras de código

Deadly Bricks using CollectionService

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

Escribir paralelo

GetTags recibe una instancia y devuelve un arreglo de cadenas, que son las etiquetas aplicadas al objeto dado.


local CollectionService = game:GetService("CollectionService")
local object = workspace.Model
local tags = CollectionService:GetTags(object)
print("The object " .. object:GetFullName() .. " has tags: " .. table.concat(tags, ", "))

Este método es útil cuando quieres hacer algo con múltiples etiquetas a la vez en un objeto. Sin embargo, sería ineficiente usar este método para verificar la existencia de una sola etiqueta. Para esto, usa CollectionService:HasTag() para verificar una sola etiqueta.

Parámetros

instance: Instance

El objeto cuyas etiquetas se deben返回。


Devuelve

Un arreglo de cadenas que son las etiquetas aplicadas al objeto dado.

Muestras de código

Using Tags and CollectionService

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

Escribir paralelo

HasTag返回给定对象是否有标签。

Por extensión, cualquier etiqueta devuelta por una llamada a CollectionService:GetTags() en un objeto devolverá true cuando se usa con este método.

Parámetros

instance: Instance

La instancia para verificar la presencia de una etiqueta.

tag: string

La etiqueta para chequear.


Devuelve

Si la instancia tiene la etiqueta.

Muestras de código

Using Tags and CollectionService

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

void

Eliminar etiqueta eliminará una etiqueta de una instancia. Este método no lanzará un error si el objeto no tenía la etiqueta en primer lugar. El éxito de la eliminación de una etiqueta creará una señal creada por CollectionService:GetInstanceRemovedSignal() con la etiqueta proporcionada.

Al eliminar una etiqueta, es común que se utilicen algunos recursos para proporcionar la funcionalidad de la etiqueta, por ejemplo, conexiones de eventos o tablas. Para evitar fugas de memoria, es una buena idea limpiar estos (desconectar, establecer a cero, etc) cuando ya no se necesitan para una etiqueta.

Parámetros

instance: Instance

La instancia para eliminar la etiqueta.

tag: string

La etiqueta para eliminar de la instancia.


Devuelve

void

Muestras de código

Using Tags and CollectionService

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")

Eventos

TagAdded

Este evento se activa cuando se agrega una etiqueta a un objeto y la etiqueta agregada es la única ocurrencia de esa etiqueta en el lugar.

Parámetros

tag: string

TagRemoved

Este evento se activa cuando se elimina una etiqueta de un objeto y la etiqueta eliminada ya no se usa en ninguna parte del lugar.

Parámetros

tag: string