CollectionService

非推奨を表示

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

作成できません
サービス

CollectionService は、 タグ を持つインスタンスのグループ (コレクション) を管理します。タグは、サーバーからクライアントにレプリケートされるオブジェクトに適用されたストリングのセットです。また、場所が保存されるときにもタグがシリアル化されます。

Class.CollectionService の主な使用は、特定のタグでインスタンスを登録し、その動作を拡張できるようにすることです。如果あなたが同じスクリプトを多くの異なるオブジェクトに追加している場合、CollectionService を使用するスクリプトが良いかもしれません。

タグは、AddTag() または RemoveTag() などのクラスメソッドを通じて追加または削除できます。また、Class.CollectionService:Tag Editor のプロパティセクションを通じて直接管理することもできます。

レプリケーション

タグがレプリケートされると、 すべてのタグは同じ時間にオブジェクト上のすべてのタグをレプリケートします

概要

方法

イベント

  • タグがオブジェクトに追加され、追加されたタグが場プレースでそのタグの唯一のオーケースでするときに発動します。

  • タグがオブジェクトから削除され、削除されたタグは場プレースのどこでも使用されなくなるときに発動します。

プロパティ

方法

AddTag

void

AddTag は、タグをインスタンスに適用しますが、タグがすでにインスタンスに適用されている場合は何もしません。タグを成功して追加すると、 Class.CollectionService:GetInstanceAddedSignal() によって作成されたシグナルが発信されます。

警告: インスタンスをタグ付けすると、イベント接続やテーブルなどの一部の資源がタグの機能を提供するために使用されることがあります。メモリ漏れを防ぐためには、

パラメータ

instance: Instance
tag: string

戻り値

void

GetAllTags

並列書き込み

戻り値

GetInstanceAddedSignal

GetInstanceAdded にタグ (文字列) が与えられ、2つの条件で信号を返します:

このメソッドに同じタグを持つ子供の呼び出しは、同じ信号オブジェクトを返します。また、CollectionService:GetTagged() を呼び出すと、すでにタグを持っているオブジェクトのリストが取得されます。DataModel 内にあるタグがすでにタグを持っている場合は、イベントが発動しないように Class.CollectionService:Tag

また、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 にはタグ (文字列) が与えられ、 2つの条件で信号を返します:

このメソッドの後続の呼び出しには、同じタグで返される信号オブジェクトが返されます。信号は、オブジェクトがタグを持っていたことがあるオブジェクトのリソースをクリーンアップするのに便利です。たとえば、接続を切断するオブジェクトの場合です。

また、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) の次のタグを持つオブジェクトの配列を返します。これらのタグは、Class.CollectionService:AddTag() を使用して追加され、タ

タグですべてのオブジェクトを検出したい場合は、現在および将来の両方のオブジェクトにこのメソッドを使用して、オブジェクトをイテレートしながら、CollectionService.GetInstanceAddedSignal によって返される信号に接続します。

このメソッドは、返されたオブジェクトのどのようなオーダーを保証しません。さらに、オブジェクトに割り当てられたタグを持つ可能性がありますが、DataModel の親は nil であるため、このメソッドはオブジェクトを返しません。

パラメータ

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

このメソッドは、オブジェクト上で複数のタグを同時に実行したい場合に便利です。ただし、このメソッドを使用して、単一のタグの存在をチェックすることは効率が悪いです。このため、 Class.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

並列書き込み

HasTag は、指定されたオブジェクトにタグがあるかどうかを返します。

拡張により、オブジェクトの Class.CollectionService:GetTags() による呼び出しに返されるすべてのタグは、このメソッドを使用するときに true が返されます。

パラメータ

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

RemoveTag はインスタンスからタグを削除します。このメソッドは、オブジェクトがタグを最初プレース持っていなかった場合でもエラーをスローしません。タグを削除することに成功すると、 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