「ゲームを赤チームと青チームに分けたい」「チームごとに出てくる場所を変えたい」
ロブロックス(Roblox)でチームを作る方法を、実際の画像付きで誰でも簡単に分かるように解説します。ここでは、赤と青の2チームを作って遊ぶ人を自動で分け、チームごとのスポーン地点、乗るとチームが変わる床、赤チームだけが通れるドアまで作ります。友だちと一緒に作品を作る「共同制作(Team Create)」とは別の話です(共同制作のやり方は共同作業のやり方で解説しています)。
中級ステップ14/28 前の記事:ロブロックス(Roblox)スタジオで銃の作り方 全体の順番を見る
使うもの:Roblox Studioが起動するパソコン、マウス、キーボード。パーツやスクリプトの入れ方はオビーの作り方で画像付きで解説しています。
今回の完成状態:下の画像のように、赤チームのPlayer1(左)は赤いドアを通り抜け、青チームのPlayer2(右)はドアで止まれば成功です。

1. Teamsにチームを入れる
新しいBaseplateを開き、エクスプローラの「Teams」にマウスを乗せて、右に出る「+」(赤い枠)を押します。

検索欄に「Team」と入れて、一覧の「Team」(赤い枠)を押します。

エクスプローラでTeamsの中に入った「Team」を選んだ状態でF2キーを押し、名前を「Red」に変えます(画像の1)。入れたばかりのチームは、チームの色(TeamColor)が「White(白)」になっています(画像の2)。

Redを選んだまま、プロパティの検索欄に「TeamColor」と入力し、TeamColorを「Really red」にします。
TeamColorの右の色の欄を押すと、色の一覧が開きます。赤いマスにマウスを乗せて「Really red」と出たら、そのマスを押します(赤い枠)。

RedのTeamColorが「Really red」になります(赤い枠)。チームは、名前ではなくこの色で区別されます。2つのチームを同じ色にしないようにします。

続けてRedを選んだまま、プロパティの検索欄に「AutoAssignable」と入力すると、最初からチェックが入っています(赤い枠)。チェックが入っているチームには、入ってきた人が自動で振り分けられます。Robloxの公式の説明によると、振り分け先は人数がいちばん少ないチームです。

次に、青チームを作ります。エクスプローラの「Teams」にマウスを乗せて「+」を押し、検索欄に「Team」と入力して、一覧の「Team」を押します。
エクスプローラでTeamsの中に新しく入った「Team」を選んだ状態でF2キーを押し、名前を「Blue」に変えます。
Blueを選んだまま、プロパティの検索欄に「TeamColor」と入力し、TeamColorを「Really blue」にします。
TeamColorの右の色の欄を押すと、色の一覧が開きます。青いマスにマウスを乗せて「Really blue」と出たら、そのマスを押します(赤い枠)。

BlueのTeamColorが「Really blue」になります(赤い枠)。BlueのAutoAssignableも、最初からチェックが入っています。

2. チームごとのスポーン地点を作る
新しいBaseplateには、最初から灰色の板に模様が付いた「SpawnLocation」が1つ入っています(プレイヤーが出てくる場所です)。新しく入れずに、このSpawnLocationをそのまま赤チーム用に作りかえます。
エクスプローラのWorkspaceの「SpawnLocation」を押して選び、F2キーを押して名前を「RedSpawn」に変えます。
RedSpawnを選んだまま、プロパティの検索欄に「Position」と入力し、「▼CFrame」のすぐ下のPositionを「-20, 0.5, 0」にしてEnterキーを押します(赤い枠)。

エクスプローラの「RedSpawn」(画像の1)を選んだまま、プロパティの検索欄に「Neutral」と入力し、「Neutral(中立)」のチェックを外します(画像の2)。Neutralを外すと、決めたチームの人だけがここから出てくるようになります。

エクスプローラでRedSpawnを選んだまま、プロパティの検索欄に「TeamColor」と入力し、TeamColorを「Really red」にします。チームのときと同じように、色の欄を押して開く一覧で赤いマスを押します(赤い枠)。

RedSpawnのTeamColorが「Really red」になります(赤い枠)。TeamColorを変えても、スポーン地点の色は灰色のままです。

見分けやすいように、RedSpawnを選んだまま、プロパティの検索欄に「BrickColor」と入力し、BrickColorも「Really red」にします。BrickColorの右の色の欄を押して開く一覧で、赤いマスを押します(赤い枠)。

BrickColorが「Really red」になります(画像の1)。スポーン地点が赤くなります(画像の2)。

エクスプローラでRedSpawnを選んでCtrl+Dキーを押すと、同じ名前の「RedSpawn」がもう1つできて、選ばれた状態になります(赤い枠)。

選んだままF2キーを押し、名前を「BlueSpawn」に変えます(赤い枠)。

BlueSpawnを選んだ状態で、プロパティの検索欄に「Position」と入力し、「▼CFrame」のすぐ下のPositionを「20, 0.5, 0」にしてEnterキーを押します(赤い枠)。

続けてBlueSpawnを選んだまま、プロパティの検索欄に「TeamColor」と入力し、TeamColorを「Really blue」にします。色の欄を押して開く一覧で、青いマスを押します(赤い枠)。

BlueSpawnのTeamColorが「Really blue」になります(赤い枠)。

続けてBlueSpawnを選んだまま、プロパティの検索欄に「BrickColor」と入力し、BrickColorを「Really blue」にします。色の欄を押して開く一覧で、青いマスを押します(赤い枠)。

BrickColorが「Really blue」になります(画像の1)。スポーン地点が青くなります(画像の2)。

| 名前 | Position | Neutral | TeamColor |
|---|---|---|---|
| RedSpawn | -20, 0.5, 0 | オフ | Really red |
| BlueSpawn | 20, 0.5, 0 | オフ | Really blue |
3D画面の上の作品のタブ「Place9」を押して3D画面に戻り、F5キーでテストを始めます(タブの名前はパソコンによって違います)。下の画像は、赤いスポーン地点から出てきたときのものです。右上のプレイヤーの一覧に「Red」と「Blue」の見出しが出ていて、自分はRedに入っています(赤い枠)。一覧が出ていないときは、Tabキーを押すと出ます。1人でテストするときはRedもBlueも0人で人数が同じなので、Blueに入ることもあります。Blueに入ったときは、青いスポーン地点から出てきます。

Shift + F5キーでテストを停止します。
3. チームが変わる床とドアを置く
乗るとチームが変わる床「RedPad」「BluePad」と赤チームだけ通れるドア「RedDoor」を1つずつ作っていきます。
RedPad(乗ると赤チームになる床)
- エクスプローラの「Workspace」にマウスを乗せて「+」を押し、検索欄に「Part」と入力して、一覧の「Part」を押します。
- エクスプローラでWorkspaceの中に入った「Part」を選んだ状態でF2キーを押し、名前を「RedPad」に変えます。
- RedPadを選んだまま、プロパティの検索欄に「Size」と入力し、Sizeの欄を「6, 1, 6」にしてEnterキーを押します。
- 続けてRedPadを選んだまま、プロパティの検索欄に「Position」と入力し、「▼CFrame」のすぐ下のPositionを「-8, 0.5, -15」にしてEnterキーを押します。
BluePad(乗ると青チームになる床)
- エクスプローラの「Workspace」にマウスを乗せて「+」を押し、検索欄に「Part」と入力して、一覧の「Part」を押します。
- エクスプローラでWorkspaceの中に新しく入った「Part」を選んだ状態でF2キーを押し、名前を「BluePad」に変えます。
- BluePadを選んだまま、プロパティの検索欄に「Size」と入力し、Sizeの欄を「6, 1, 6」にしてEnterキーを押します。
- 続けてBluePadを選んだまま、プロパティの検索欄に「Position」と入力し、「▼CFrame」のすぐ下のPositionを「8, 0.5, -15」にしてEnterキーを押します。
床の色は、ドアを作ったあとで変えます。
RedDoor(赤チームだけ通れるドア)
- エクスプローラの「Workspace」にマウスを乗せて「+」を押し、検索欄に「Part」と入力して、一覧の「Part」を押します。
- エクスプローラでWorkspaceの中に新しく入った「Part」を選んだ状態でF2キーを押し、名前を「RedDoor」に変えます。
- RedDoorを選んだまま、プロパティの検索欄に「Size」と入力し、Sizeの欄を「8, 10, 1」にしてEnterキーを押します(画像の1がRedDoor、画像の2がSize)。

- 続けてRedDoorを選んだまま、プロパティの検索欄に「Position」と入力し、「▼CFrame」のすぐ下のPositionを「0, 5, -30」にしてEnterキーを押します(赤い枠)。

- 続けてRedDoorを選んだまま、プロパティの検索欄に「Transparency」と入力し、Transparency(透明度)の欄を「0.5」にしてEnterキーを押します。半分すけたドアになります(赤い枠)。

- 続けてRedDoorを選んだまま、プロパティの検索欄に「Color」と入力します。BrickColorとColorの2つの欄が並ぶので、下のColorの欄の数字を「255, 0, 0」に書き換えてEnterキーを押します。ドアが赤くなり、上のBrickColorの欄が「Really red」に変わります(赤い枠)。

床の色を変える
- エクスプローラで「RedPad」を押して選びます。RedPadを選んだまま、プロパティの検索欄に「Color」と入力し、下のColorの欄の数字を「255, 0, 0」に書き換えてEnterキーを押します。上のBrickColorの欄が「Really red」に変わります。
- エクスプローラで「BluePad」を押して選びます。BluePadを選んだまま、プロパティの検索欄に「Color」と入力し、下のColorの欄の数字を「0, 0, 255」に書き換えてEnterキーを押します。上のBrickColorの欄が「Really blue」に変わります。
見直し用に、3つの部品の値を表にまとめます。
| 名前 | Size | Position(▼CFrameのすぐ下) | 色 | そのほか |
|---|---|---|---|---|
| RedPad | 6, 1, 6 | -8, 0.5, -15 | Color 255, 0, 0(Really red) | 乗ると赤チームになる |
| BluePad | 6, 1, 6 | 8, 0.5, -15 | Color 0, 0, 255(Really blue) | 乗ると青チームになる |
| RedDoor | 8, 10, 1 | 0, 5, -30 | Color 255, 0, 0(Really red) | Transparency 0.5(赤チームだけ通れる) |
最後に、エクスプローラでBluePadを押し、Shiftキーを押したままRedPadを押して3つをまとめて選びます(画像の1)。そのまま3D画面上部メニューの「ホーム」タブにある「固定」(「ロック」ボタンの右、画像の2)を押すと、3つとも固定されます。

3D画面に、赤い床(画像の1)、青い床(画像の2)、半透明の赤いドア(画像の3)が並びます。

4. 乗るとチームが変わるスクリプトを入れる
エクスプローラの「ServerScriptService」にマウスを乗せて「+」を押し、検索欄に「Script」と入力して、一覧の「Script」を押します。
エクスプローラでServerScriptServiceの中に入った「Script」を選んだ状態でF2キーを押し、名前を「TeamPads」に変えます。
TeamPadsを選んだまま、プロパティの検索欄に「RunContext」と入力し、「▼動作」の欄にあるRunContextの一覧から「Server」を選びます(赤い枠)。RunContextは、スクリプトをどこで動かすかを決める設定で、「Server」はゲームのサーバー側で動かす設定です。

TeamPadsの画面で、中身を全部消して、次のコードを貼り付けます。
local Players = game:GetService("Players")
local Teams = game:GetService("Teams")
-- 床と、乗ったときに入るチームの組み合わせ
local pads = {
{ part = workspace:WaitForChild("RedPad"), team = Teams:WaitForChild("Red") },
{ part = workspace:WaitForChild("BluePad"), team = Teams:WaitForChild("Blue") },
}
for _, pad in pads do
pad.part.Touched:Connect(function(hit)
-- 触れたのがプレイヤーのアバターか確かめる
local character = hit.Parent
local player = Players:GetPlayerFromCharacter(character)
if not player then return end
local humanoid = character:FindFirstChildOfClass("Humanoid")
if not humanoid or humanoid.Health <= 0 then return end
-- すでにこのチームなら何もしない
if player.Team == pad.team and not player.Neutral then return end
player.Neutral = false
player.Team = pad.team
end)
end

| コードの部分 | していること |
|---|---|
| pads | どの床に乗ったら、どのチームに入るかの組み合わせ |
| GetPlayerFromCharacter | 乗ったのがプレイヤーか確かめる |
| player.Team = pad.team | チームを変える。右上の一覧と頭の上の名前の色が自動で変わる |
5. 赤チームだけ通れるドアのスクリプトを入れる
エクスプローラの「ServerScriptService」にマウスを乗せて「+」を押し、検索欄に「Script」と入力して、一覧の「Script」を押します。
エクスプローラでServerScriptServiceの中に新しく入った「Script」を選んだ状態でF2キーを押し、名前を「TeamDoor」に変えます。
TeamDoorを選んだまま、プロパティの検索欄に「RunContext」と入力し、「▼動作」の欄にあるRunContextの一覧から「Server」を選びます(赤い枠)。

TeamDoorの画面で、中身を全部消して、次のコードを貼り付けます。
local Players = game:GetService("Players")
local Teams = game:GetService("Teams")
local door = workspace:WaitForChild("RedDoor")
local redTeam = Teams:WaitForChild("Red")
local DOOR_GROUP = "RedDoor" -- ドアが入るグループ
local PASS_GROUP = "RedPass" -- 赤チームのアバターが入るグループ
-- グループを用意して「ドアと赤チームはぶつからない」にする
for _, name in { DOOR_GROUP, PASS_GROUP } do
if not workspace:IsCollisionGroupRegistered(name) then
workspace:RegisterCollisionGroup(name)
end
end
workspace:CollisionGroupSetCollidable(DOOR_GROUP, PASS_GROUP, false)
door.CollisionGroup = DOOR_GROUP
-- この人がドアを通れるか
local function canPass(player)
return player.Team == redTeam and not player.Neutral
end
-- アバターの全部のパーツを、通れるかどうかに合わせたグループに入れる
local function applyGroup(player)
local character = player.Character
if not character then return end
local group = if canPass(player) then PASS_GROUP else "Default"
for _, part in character:GetDescendants() do
if part:IsA("BasePart") then
part.CollisionGroup = group
end
end
end
local function onCharacter(player, character)
applyGroup(player)
-- あとから付く帽子などのパーツにも同じグループを付ける
character.DescendantAdded:Connect(function(desc)
if desc:IsA("BasePart") then
desc.CollisionGroup = if canPass(player) then PASS_GROUP else "Default"
end
end)
end
local function setup(player)
player.CharacterAdded:Connect(function(character)
onCharacter(player, character)
end)
if player.Character then
onCharacter(player, player.Character)
end
-- チームが変わったら、今のアバターのグループも変える
player:GetPropertyChangedSignal("Team"):Connect(function()
applyGroup(player)
end)
player:GetPropertyChangedSignal("Neutral"):Connect(function()
applyGroup(player)
end)
end
Players.PlayerAdded:Connect(setup)
for _, player in Players:GetPlayers() do
setup(player)
end

このコードは「衝突グループ」という仕組みを使っています。ドアを「RedDoor」グループ、赤チームの人の体を「RedPass」グループに入れ、この2つのグループはぶつからないと決めています。青チームの人の体はふつうのグループのままなので、ドアにぶつかって止まるというわけです。
| コードの部分 | していること |
|---|---|
| RegisterCollisionGroup | ぶつかるかどうかを決めるグループを2つ作る |
| CollisionGroupSetCollidable(…, false) | ドアのグループと赤チームのグループはぶつからないようにする |
| applyGroup | 赤チームの人の体をRedPassに、それ以外の人をふつうのグループに入れる |
| GetPropertyChangedSignal("Team") | 床でチームが変わったら、すぐに通れる・通れないを切りかえる |
6. 2人でテストする
Studioの画面左上、「ホーム」などのタブと同じ段のいちばん左にある「テスト」と書かれた欄の右の「∨」を押し、一覧から「サーバーとクライアント」を選びます(赤い枠)。

人数の上向き三角を押して「2」にします(赤い枠)。

左の青い再生ボタンを押すとテストが始まり、Player1とPlayer2の窓が開きます。2人テストのくわしいやり方は文字を出す方法の2人テストで解説しています。
以下は、アソビシフト編集部が確かめた結果です。左のPlayer1は赤、右のPlayer2は青のスポーン地点から出てきました。右上の一覧を見ると、Player1は「Red」(画像の1)、Player2は「Blue」(画像の2)の下に並んでいて、自動でチームに分かれていました。どちらのチームに入るかは、テストのたびに逆になることもあります。逆になったときは、このあとの説明のPlayer1とPlayer2を入れかえて読んでください。

Player1の窓を押してからW・A・S・Dキーで赤いドアの正面まで歩き、Wキーでドアへ向かって歩きます。次にPlayer2の窓を押して、同じように赤いドアの正面からドアへ向かって歩きます。赤チームのPlayer1はドアを通り抜けて奥まで進み(画像の1)、青チームのPlayer2はドアの前で止まりました(画像の2、3)。

次に、Player2の窓で青チームのPlayer2を赤い床まで歩かせて乗せます。画面の左上に「あなたは現在「Red」チームに所属しています。」と出て(画像の1)、もう一度ドアに向かうと、今度は通り抜けられました(画像の2)。

| 試したこと | Player1(赤) | Player2(青) |
|---|---|---|
| 入ったとき | 赤のスポーン地点から出た | 青のスポーン地点から出た |
| ドアに向かって歩く | 通り抜けた | ドアで止まった |
| Player2が赤い床に乗ったあと | - | 赤チームに変わり、ドアを通り抜けた |
チームがうまく分かれないときの確かめ方
| 症状 | 見るところ | 直し方 |
|---|---|---|
| チームに分かれない | AutoAssignable | 入れたいチームにチェックが入っているか |
| 赤チームなのに、チームの色にしていない灰色のスポーン地点から出る | スポーン地点のNeutral | チーム用のスポーン地点はNeutralを外す。Neutralがオンの灰色のスポーン地点が残っていると、どのチームの人もそこから出てくることがあるので、エクスプローラで選んでDeleteキーで消す |
| 自分のチームのスポーン地点から出ない | スポーン地点のTeamColor | チームのTeamColorと同じ色か |
| 知らないチームが増えた | スポーン地点 | Robloxの公式の説明によると、StudioでNeutralがオフのスポーン地点をWorkspaceに入れたとき、その色のチームがなければ自動でチームが作られる。チームはTeamsに自分で作っておく |
| 赤チームでもドアを通れない | TeamDoorのスクリプト | ServerScriptServiceにあり、RunContextがServerか |
| 床に乗ってもチームが変わらない | 床の名前 | 「RedPad」「BluePad」とコードの名前が同じか |
スクリプトが動いているか分からないときは、スクリプトが動かないときの確認手順で出力の見方を確かめてください。
AIに相談するときの伝え方
Roblox Studioで、TeamsのRedとBlueのチームを使っています。
Workspace/RedDoor を、赤チームの人だけが通り抜けられるようにしてください。
ServerScriptServiceのScriptで、衝突グループ(workspace:RegisterCollisionGroup)を使い、赤チームの人の体のパーツだけドアとぶつからないようにしてください。
チームが変わったときにも、すぐに切りかわるようにしてください。
よくある質問
チームを3つ以上にできる?
できます。Teamsの中にTeamを足して、それぞれ違うTeamColorにします。スポーン地点も、チームの数だけ用意してください。
剣やレーザーで、味方に当たらないようにしたい
体力を減らす前に、攻撃した人と当たった人のチームを比べ、同じチームなら何もしないようにします。
剣の作り方と銃の作り方のスクリプトには、どちらも target:TakeDamage(DAMAGE) という体力を減らす行があります。この行のすぐ上に、次の2行を入れます。player は攻撃した人、model は当たった相手のキャラクター(どちらも剣と銃のスクリプトで使っている名前)、victim は当たった相手のプレイヤーです。
local victim = game:GetService("Players"):GetPlayerFromCharacter(model)
if victim and victim.Team == player.Team then continue end -- 同じチームなら体力を減らさない
剣のスクリプトでは、continue で次の相手を調べに進みます。銃のスクリプトはくり返しの中ではないので、continue を return に書きかえます。当たった相手がダミーのようにプレイヤーでないときは、victim が空(nil)になり、これまでどおり体力が減ります。
友だちと一緒に作品を作る「チーム」とは違う?
違います。この記事のチームは、遊ぶ人をゲームの中で分ける仕組みです。友だちと同じ作品を一緒に作るのは「共同制作(Team Create)」という別の機能です。やり方はロブロックス(Roblox)スタジオで共同作業するやり方で解説しています。
次のステップ(中級 15/28)
次は、ゴールした人にバッジを渡します。
次に知りたいことを選ぶ
- 次のステップ:ゴールした人にバッジを渡します → ロブロックス(Roblox)のバッジの作り方
- チームごとに途中から復活させたい → ロブロックス(Roblox)のチェックポイントの作り方
- チームで戦えるようにしたい → ロブロックス(Roblox)スタジオで剣の攻撃を作る方法
- サーバーで決める仕組みを詳しく知りたい → ロブロックス(Roblox)のRemoteEventの使い方