CollectionService

显示已弃用

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

无法创建
服务

CollectionService 管理标签 对象 的群组(标签). 标签是从服务器到客户端复制的对象的应用集。它们还会在地方保存时串化。

Class.CollectionService 的主要用途是注册实例并使用特定标签来扩展其行为。如果您发现自己在添加同一个脚本到许多不同的对象,那么使用 CollectionService 的脚本可能会更好。

标签可以通过这个类的方法添加或移除标签,例如 AddTag()RemoveTag()。它们还可以通过 Studio 中的标签部分的属性管理直接在 Studio 中管理,或通过内置的1>标签编辑器1>工具来管理。

复制

当标签复制时, 所有标签在对象上同时复制 。因此,如果您在客户端设置标签,那么在服务器上的不同标签上添加/移

概要

方法

活动

属性

方法

AddTag

void

添加标签将标签应用到一个 Instance ,不会在标签已应用到实例时执行任何操作。 成功添加标签会触发由 CollectionService:GetInstanceAddedSignal() 创建的信号,并使用指定的标签进行标记。

警告: 标记实例时,常常有一些资源被用来为标记提供其功能,例如事件连接或表。为了防止内存泄露,一旦不再需要标记,就要清理这些 (连接到信号的返回,设置为零等)

参数

instance: Instance
tag: string

返回

void

GetAllTags

写入并联

返回

GetInstanceAddedSignal

给予GetInstanceAdded一个字符串签(string),并返回一个信号,它在两个条件下触发:

使用相同标签的后续调用此方法将返回同一的信号对象。请考虑使用 CollectionService:GetTagged() 来获取已有标签的对象列表(从而不会触发事件),以及 DataModel 中的 “Class.Col

还请参阅 CollectionService:GetInstanceRemovedSignal(),这会在类似条件下触发的事件返回。

参数

tag: string

您要关注的标签。


返回

当您将标签添加到实例时触发的事件。

代码示例

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 将被标记 (一个字符串) 和返回一个信号,该信号在两个条件下触发:

使用相同标签的后续调用将返回相同的信号对象。信号有助于清理使用过的资源,例如关闭连接。

还请参阅 CollectionService:GetInstanceAddedSignal(),这会在类似条件下触发的事件返回。

参数

tag: string

您要关注的标签。


返回

当您从实例中移除标签时触发的事件。

代码示例

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
写入并联

GetTagged 返回一个带有指定标签的对象阵列,其子是 DataModel 的后代 ( game )。 此标签通过使用 CollectionService:AddTag() 来添加,将确保此方法不

如果您想要检测所有带有标签的对象,现有和未来的,使用此方法来在对象上循环过程中也作为一个连接到CollectionService.GetInstanceAddedSignal返回的信号。

此方法不保证返回的对象的任何订购。 此外,可能对象有与给予标签,但不是DataModel 的后代,即其父为零。 此方法不会返回此类对象。

参数

tag: string

搜索标签。


返回

Instances

一个包含所有标签的实例列表。

代码示例

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

写入并联

GetTags 将给予一个实例,并返回一个阵列的字符串,这些字符串是应用于指定对象的标签。


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

此方法有助于您想要在多个标签上同时执行某些对象作时。 但是,使用此方法来检查单个标签的存在是不合理的。 使用 CollectionService:HasTag() 来检查单个标签。

参数

instance: Instance

返回标签的对象。


返回

用于指定对象的字符串阵列。

代码示例

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

写入并联

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

通过扩展,使用 CollectionService:GetTags() 在对象上返回的任何标签都会在使用此方法时返回真。

参数

instance: Instance

检查标签是否存在的实例。

tag: string

该标签检查。


返回

是否拥有标签。

代码示例

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

移除标签将从实例中移除标签。 此方法不会发生错误,如果对象在第一场景没有标签。 成功移除标签将触发由 CollectionService:GetInstanceRemovedSignal() 创建的信号,并使用指定的标签发射成功。

当移除标签时,有些资源常常用于为标签提供其功能,例如事件连接或表。为了防止内存泄露,请在不再需要标签时清理这些(取消连接、设置为零等)。

参数

instance: Instance

从中删除标签的实例。

tag: string

从实例中移除标签。


返回

void

代码示例

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

活动

TagAdded

当标签添加到对象时,这个事件会触发,添加的标签是该标签在该场景的唯一的出现。

参数

tag: string

TagRemoved

当标签从对象中移除时,此事件触发。当标签不再使用在该场景方的任何地方时。

参数

tag: string