本文へスキップ
Roblox基礎

RobloxのCollectionService入門|タグを付けたPartだけ色をそろえる

Roblox Studioのタグで複数Partをまとめて扱う例です。GetTaggedで既存の対象を探し、タグの追加で色を変更、削除で元へ戻す処理をサーバーのScriptにまとめます。

公開日: 2026-10-27#Roblox#Luau#CollectionService#タグ#初心者
ガイドキャラクター
Roblox Studioのタグで複数Partをまとめて扱う例です。GetTaggedで既存の対象を探し、タグの追加で色を変更、削除で元へ戻す処理をサーバーのScriptにまとめます。
学習者キャラクター
準備するものと、動作確認で見る結果を先に確認してから進めます。
RobloxのCollectionService入門|タグを付けたPartだけ色をそろえるの手順と判断条件を示す説明図
仕組みを説明する模式図です。エディタのスクリーンショットではありません。小さい画面では横にスクロールできます。設定値と手順は本文で確認してください。

この記事で作るもの

同じタグが付いたPartだけ、サーバーのScriptからオレンジ色へ変える実験を作ります。タグを外したPartは、変更前の色へ戻します。対象はRoblox Studioの新規Baseplateと、ServerScriptService内の通常のScriptです。

CollectionServiceを使うと、同じタグが付いたオブジェクトをまとめて探せます。Partの名前を1個ずつ列挙する代わりに、今回はDemoLampという共通の目印で対象を選びます。ここでは色だけを変え、実際の照明や点滅は追加しません。CollectionServiceの公式資料

1. 3つのPartを置き、2つへタグを付ける

WorkspaceへPartを3つ作ります。次の高さは、Baseplateの上面がY=0の場合です。床を移動している場合は高さを合わせます。

対象SizePositionColor
LampA(4, 1, 4)(-6, 0.5, -8)RGB (140, 150, 165)
LampB(4, 1, 4)(0, 0.5, -8)RGB (140, 150, 165)
PlainPart(4, 1, 4)(6, 0.5, -8)RGB (60, 140, 220)

3つともAnchoredとCanCollideをオンにします。色はPropertiesのColorで指定します。

  1. LampAを選び、Properties下部のTagsでDemoLampを追加します。
  2. LampBにも同じDemoLampタグを追加します。大文字・小文字をそろえます。
  3. PlainPartにはタグを付けません。
  4. ServerScriptServiceへ通常のScriptを作り、TaggedPartColorsと名付けます。

Propertiesが見当たらない場合はStudioのWindowメニューなどから開きます。タグは名前や親子関係とは別の目印です。フォルダー名をDemoLampへ変える操作とは区別します。Propertiesとタグの公式ガイド

Workspace
  Baseplate
  LampA (Part)                  ← DemoLampタグ
  LampB (Part)                  ← DemoLampタグ
  PlainPart (Part)              ← タグなし
ServerScriptService
  TaggedPartColors (Script)

2. 既存の対象と、あとから追加された対象を扱う

TaggedPartColorsの中身を次のコードへ置き換えます。各Partの子へ同じScriptを複製する必要はありません。

local CollectionService = game:GetService("CollectionService")

local TAG = "DemoLamp"
local TARGET_COLOR = Color3.fromRGB(255, 190, 70)
local originalColors = {}

local function applyColor(instance)
    if not instance:IsA("BasePart") then
        return
    end
    if not instance:IsDescendantOf(workspace) then
        return
    end
    if originalColors[instance] ~= nil then
        return
    end

    originalColors[instance] = instance.Color
    instance.Color = TARGET_COLOR
end

local function restoreColor(instance)
    local originalColor = originalColors[instance]
    if originalColor == nil then
        return
    end

    originalColors[instance] = nil
    if instance:IsA("BasePart") then
        instance.Color = originalColor
    end
end

CollectionService:GetInstanceAddedSignal(TAG):Connect(applyColor)
CollectionService:GetInstanceRemovedSignal(TAG):Connect(restoreColor)

for _, instance in CollectionService:GetTagged(TAG) do
    applyColor(instance)
end

処理の入口は2つあります。GetTagged()のループは、Scriptの開始時からタグが付いている対象へ対応します。GetInstanceAddedSignal()は、あとからタグを付けた対象などを受け取ります。追加通知だけを接続しても、開始前からあるPartの処理にはならないため、両方を用意します。

タグを外すとGetInstanceRemovedSignal()で元の色へ戻し、記録も消します。同じ対象へ処理が重なっても元の色を上書きしないよう、保存済みなら何もしない条件も入れています。タグの取得・追加通知・削除通知

3. 色を変える範囲を確認する

このScriptは、Workspaceの中にあるBasePartだけを対象にします。ModelやFolderへタグを付けても、子Partへ自動で同じタグは付きません。この教材では、色を変えるPartそのものへタグを付けます。

ReplicatedStorageのひな型にあらかじめタグを付け、あとからWorkspaceへ移動する運用は、このコードの対象外です。ゲーム全体の階層(DataModel)の中で親を移しただけでは、タグの追加通知に相当しない場合があります。この例で実行中に対象を増やすときは、先にタグなしのPartをWorkspaceへ置き、その後タグを付けます。

サーバーからColorを変えるので、同じサーバーのプレイヤーへ変更が共有されます。ただし、タグの操作や色の変更を別スクリプトからも行うと、この教材で保存した「元の色」と競合します。今回は色を管理するScriptを1つにします。

動作確認

Test(F5)で実行します。実行前に配置したLampAとLampBはオレンジ色になり、PlainPartは青いままになることを確認します。

実行中のタグ操作は、Studioをサーバー側の表示へ切り替えてから行います。クライアント側だけの変更を、サーバーへ保存された結果と取り違えないようにします。Studioのテストモード

サーバー側での操作期待する結果
実行開始LampAとLampBだけオレンジ色
LampAのDemoLampタグを外すLampAだけ元の灰色へ戻る
LampAへ同じタグを付け直すLampAが再びオレンジ色になる
PlainPartへタグを付けるPlainPartもオレンジ色になる
PlainPartのタグを外す最初の青色へ戻る
新しいタグなしPartをWorkspaceへ作り、タグを付けるそのPartもオレンジ色になる

Stopすると、通常、テスト中に加えた変更は編集状態へ引き継がれません。保存するタグやPartの配置は、テスト終了後に編集状態で設定します。必要に応じてServer & Clientsで2人を起動し、同じPartの色が共有されていることも確認します。

うまく動かないとき

  • 色が変わらない:通常のScriptがServerScriptServiceにあり、Enabledがオンか確認します。タグの綴りも確認します。
  • Modelの中が変わらない:Model全体ではなく、各Partへタグを付けます。
  • 元の色へ戻らない:クライアント側だけでタグを外していないか、別ScriptがColorを書き換えていないか確認します。
  • 実行前からあるPartだけ変わらない:GetTagged()の最初のループを省略していないか確認します。
  • タグ付きの物を移動しても反応しない:この例の範囲を確認し、Workspaceへ置いてからタグを付けます。

まとめ

開始時の対象はGetTagged()、あとからの追加と削除はそれぞれの通知で扱います。色を変える前の値をPartごとに保存するので、タグを外したときはそれぞれの元の色へ戻せます。Partの固定方法を先に確認したい場合はPartとAnchoredの基本へ進めます。

学習者キャラクター
今回の内容で覚えておくポイントを確認したいです。
ガイドキャラクター
開始時の対象はGetTagged()、あとからの追加と削除はそれぞれの通知で扱います。色を変える前の値をPartごとに保存するので、タグを外したときはそれぞれの元の色へ戻せます。Partの固定方法を先に確認したい場合はPartとAnchoredの基本へ進めます。
この記事のまとめを案内するガイドキャラクター

この記事のまとめ

Roblox Studioのタグで複数Partをまとめて扱う例です。GetTaggedで既存の対象を探し、タグの追加で色を変更、削除で元へ戻す処理をサーバーのScriptにまとめます。