CollectionService
*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。
CollectionService は、 タグ を持つインスタンスのグループ (コレクション) を管理します。タグは、サーバーからクライアントにレプリケートされるオブジェクトに適用されたストリングのセットです。また、場所が保存されるときにもタグがシリアル化されます。
Class.CollectionService の主な使用は、特定のタグでインスタンスを登録し、その動作を拡張できるようにすることです。如果あなたが同じスクリプトを多くの異なるオブジェクトに追加している場合、CollectionService を使用するスクリプトが良いかもしれません。
タグは、AddTag() または RemoveTag() などのクラスメソッドを通じて追加または削除できます。また、Class.CollectionService:Tag Editor のプロパティセクションを通じて直接管理することもできます。
レプリケーション
タグがレプリケートされると、 すべてのタグは同じ時間にオブジェクト上のすべてのタグをレプリケートします 。
概要
方法
タグを Instance に適用します。
指定したタグをオブジェクトに追加すると、信号が発信されます。
指定したタグをインスタンスから削除すると、信号を返します。
指定されたタグでゲーム内のオブジェクトの陣列を返します。
指定されたオブジェクトに適用されたすべてのタグのアレイを取得します。
オブジェクトにタグが与えられているかどうかをチェックします。
インスタンスからタグを削除します。
イベント
タグがオブジェクトに追加され、追加されたタグが場プレースでそのタグの唯一のオーケースでするときに発動します。
タグがオブジェクトから削除され、削除されたタグは場プレースのどこでも使用されなくなるときに発動します。
プロパティ
方法
AddTag
AddTag は、タグをインスタンスに適用しますが、タグがすでにインスタンスに適用されている場合は何もしません。タグを成功して追加すると、 Class.CollectionService:GetInstanceAddedSignal() によって作成されたシグナルが発信されます。
警告: インスタンスをタグ付けすると、イベント接続やテーブルなどの一部の資源がタグの機能を提供するために使用されることがあります。メモリ漏れを防ぐためには、
パラメータ
戻り値
GetInstanceAddedSignal
GetInstanceAdded にタグ (文字列) が与えられ、2つの条件で信号を返します:
- タグが与えられたインスタンスは、DataModel の子孫として追加されます。たとえば、Instance.Parent または類似の設定により。
このメソッドに同じタグを持つ子供の呼び出しは、同じ信号オブジェクトを返します。また、CollectionService:GetTagged() を呼び出すと、すでにタグを持っているオブジェクトのリストが取得されます。DataModel 内にあるタグがすでにタグを持っている場合は、イベントが発動しないように Class.CollectionService:Tag
また、CollectionService:GetInstanceRemovedSignal() を参照して、同様の条件でイベントを発動するエラーが返されます。
パラメータ
監視するタグ。
戻り値
タグをインスタンスに追加すると発動するイベント。
コードサンプル
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つの条件で信号を返します:
- タグが与えられたインスタンスは、DataModel の下位である、例えば、Instance.Parent を設定しないでくださいなどと、類似するように削除されます。
このメソッドの後続の呼び出しには、同じタグで返される信号オブジェクトが返されます。信号は、オブジェクトがタグを持っていたことがあるオブジェクトのリソースをクリーンアップするのに便利です。たとえば、接続を切断するオブジェクトの場合です。
また、CollectionService:GetInstanceAddedSignal() を参照して、同様の条件でイベントを発動するエベントを返します。
パラメータ
監視するタグ。
戻り値
インスタンスからタグを削除すると発動するイベント。
コードサンプル
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 は、DataModel (game) の次のタグを持つオブジェクトの配列を返します。これらのタグは、Class.CollectionService:AddTag() を使用して追加され、タ
タグですべてのオブジェクトを検出したい場合は、現在および将来の両方のオブジェクトにこのメソッドを使用して、オブジェクトをイテレートしながら、CollectionService.GetInstanceAddedSignal によって返される信号に接続します。
このメソッドは、返されたオブジェクトのどのようなオーダーを保証しません。さらに、オブジェクトに割り当てられたタグを持つ可能性がありますが、DataModel の親は nil であるため、このメソッドはオブジェクトを返しません。
パラメータ
検索するタグ。
戻り値
すべてのインスタンスにタグが付いているアレイ。
コードサンプル
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.Modellocal tags = CollectionService:GetTags(object)print("The object " .. object:GetFullName() .. " has tags: " .. table.concat(tags, ", "))
このメソッドは、オブジェクト上で複数のタグを同時に実行したい場合に便利です。ただし、このメソッドを使用して、単一のタグの存在をチェックすることは効率が悪いです。このため、 Class.CollectionService:HasTag() を使用して、単一のタグをチェックします。
パラメータ
タグが返されるオブジェクト。
戻り値
指定されたオブジェクトに適用されるストリングの配列。
コードサンプル
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 は、指定されたオブジェクトにタグがあるかどうかを返します。
- タグを追加するには、CollectionService:AddTag() を使用して、このメソッドが true で返されます。
- タグを削除するために CollectionService:RemoveTag() を使用すると、このメソッドが偽で返されます。
拡張により、オブジェクトの Class.CollectionService:GetTags() による呼び出しに返されるすべてのタグは、このメソッドを使用するときに true が返されます。
パラメータ
戻り値
インスタンスにタグがあるかどうか。
コードサンプル
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 はインスタンスからタグを削除します。このメソッドは、オブジェクトがタグを最初プレース持っていなかった場合でもエラーをスローしません。タグを削除することに成功すると、 CollectionService:GetInstanceRemovedSignal() によって作成されたシグナルが発信されます。
タグを削除すると、タグの機能を提供するためにいくつかのリソースが使用されることがあります。たとえば、イベント接続やテーブルなどです。メモリ漏れを防ぐためには、タグの必要がなくなったときにこれらをきれいにすることが좋습니다(接続を切断、ゼロに設定など)。
パラメータ
戻り値
コードサンプル
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")