「友だちと遊べる鬼ごっこを自分で作りたい」「ロビーで待って、時間になったら始まるゲームの流れが分からない」
ロブロックス(Roblox)スタジオで鬼ごっこを作る方法を、実際の画像付きで誰でも簡単に分かるように解説します。鬼ごっこは、ロビーで待つ→試合をする→結果を出してロビーへ戻る、をくり返すゲームです。この「くり返し」をラウンド制といいます。この記事では、ゲームの流れ全体を1つのスクリプト(GameManager)で動かす作りにします。
上級ステップ7/42 前の記事:ロブロックス(Roblox)スタジオの車の作り方 全体の順番を見る
使うもの:Roblox Studioが起動するパソコン、マウス、キーボード。人を決めた場所へ動かすしかけはテレポートの作り方、時間で次の段階へ進めるしかけはタワーディフェンスの作り方【前編】のウェーブと同じ考え方です。画面に文字を出すTextLabelは文字を出す方法で使いました。
今回の完成状態:下の画像のように、2人で遊ぶと上に残りの秒数が出て(画像の1)、選ばれた鬼が赤く光り(画像の2)、逃げる人の画面からも鬼が赤く見えれば成功です(画像の3)。左がPlayer1、右がPlayer2の画面です。

1回のラウンドの流れ
GameManagerは、次の5つを上から順に行い、最後まで来たら1に戻ります。秒数はあとで作るGameSettingsで変えられます。
| 順番 | 画面の上の文字 | していること |
|---|---|---|
| 1. 人数を待つ | あと 1 人で始まります | minimumPlayersで決める2人がそろうまで、1秒ごとに数え直す |
| 2. ロビーで数える | 鬼ごっこまで 10 秒 | intermissionDurationで決める10秒を、1秒ずつ減らす |
| 3. 鬼を決めて移動 | (すぐ次へ) | 1人をくじで鬼にして赤く光らせ、全員をアリーナへ動かす |
| 4. 鬼ごっこ | 鬼ごっこ中! 残り 60 秒(逃げる人 1 人) | matchDurationで決める60秒を数える。鬼にさわられた人はロビーへ戻る。全員つかまるか、残りが 0 秒になると終わる |
| 5. 結果 | 全員つかまった! 鬼(Player1)の勝ち/逃げきった! 逃げる人の勝ち | transitionTimeで決める5秒だけ結果を見せてから、全員をロビーへ戻す |
鬼ごっこの部品
| 名前 | 置く場所 | 役目 |
|---|---|---|
| Arena(Floor と Wall 4枚) | Workspace | 鬼ごっこをする場所。壁で囲んで、ロビーから歩いて入れないようにする |
| SpawnLocation | Workspace | 最初から入っている白い板。ここがロビーになる |
| Status(StringValue) | ReplicatedStorage | 画面の上に出す文字を保存しておく場所 |
| ModuleScripts・GameSettings | ServerStorage | 待つ秒数や鬼ごっこの秒数などの決まりを1か所にまとめる |
| GameManager(Script) | ServerScriptService | ゲームの流れ(待つ→数える→鬼ごっこ→結果)を動かす |
| StatusGui・StatusText・StatusDisplay | StarterGui | Statusの文字を、全員の画面の上に出す |
StringValueは、文字を1つ保存しておける部品です。サーバーのGameManagerがStatusの文字を書きかえると、ReplicatedStorageに置いてあるので全員のパソコンにも同じ文字が届きます。
1. 鬼ごっこをするアリーナの床を作る
新しいBaseplateを開き、エクスプローラの「Workspace」にマウスを乗せて、右に出る「+」を押します(赤い枠)。赤い枠は、次に押す場所です。

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

エクスプローラでFolderを選んだままF2キーを押し、名前を「Arena」に変えます(赤い枠)。

エクスプローラの「Arena」にマウスを乗せて、右に出る「+」を押します(赤い枠)。

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

Arenaの中にPartが入り、スタートの台の上に灰色の小さな四角が出ます。エクスプローラでPartを選んだままF2キーを押し、名前を「Floor」に変えます(赤い枠)。名前はスクリプトで使うので、大文字・小文字まで同じにします。

Floorは、次の4つのプロパティを変えます。1つずつ手順を書きます。
| プロパティ | 値 |
|---|---|
| Size | 60, 1, 60 |
| Position(▼CFrame のすぐ下) | 0, 0.5, -80 |
| Anchored | チェックを入れる |
| Color | 120, 144, 130(Sand green) |
エクスプローラでFloorを選んだ状態で、プロパティの検索欄に「Size」と入力します。Sizeの欄を「60, 1, 60」に書きかえて、Enterキーを押します(赤い枠)。横60、高さ1、奥行き60の広い床になります。

Floorを選んだまま、プロパティの検索欄に「Position」と入力します。Positionは3つ出るので、「▼CFrame」のすぐ下のPositionの欄を「0, 0.5, -80」に書きかえて、Enterキーを押します(赤い枠)。床が、スポーン地点(白い板)から離れた奥へ動きます。

Floorを選んだまま、プロパティの検索欄に「Anchored」と入力し、Anchoredの四角を押してチェックを入れます(赤い枠)。Anchoredは部品をその場に固定するプロパティで、チェックを入れるとテスト中に床が落ちなくなります。

Floorを選んだまま、プロパティの検索欄に「Color」と入力します。Colorの欄の数字を「120, 144, 130」に書きかえて、Enterキーを押します(赤い枠)。床がくすんだ緑になり、上のBrickColorの欄も「Sand green」に変わります。ロビーの床と色を分けておくと、テスト中にアリーナへ移動したことが分かりやすくなります。色はほかの色でもかまいません。

2. アリーナを壁で囲む
壁は1枚作ってから、Ctrl + Dキーで複製して4枚にします。エクスプローラの「Arena」にマウスを乗せて、右に出る「+」を押します(赤い枠)。

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

Arenaの中にPartが入り、スタートの台の上に出ます。エクスプローラでPartを選んだままF2キーを押し、名前を「Wall」に変えます(赤い枠)。

1枚目のWallは、次の3つのプロパティを変えます。
| プロパティ | 値 |
|---|---|
| Size | 64, 12, 2 |
| Position(▼CFrame のすぐ下) | 0, 6.5, -111 |
| Anchored | チェックを入れる |
順にやっていきます。エクスプローラでWallを選んだ状態で、プロパティの検索欄に「Size」と入力します。Sizeの欄を「64, 12, 2」に書きかえて、Enterキーを押します(赤い枠)。横に長く、厚さ2の板になります。

Wallを選んだまま、プロパティの検索欄に「Position」と入力します。「▼CFrame」のすぐ下のPositionの欄を「0, 6.5, -111」に書きかえて、Enterキーを押します(赤い枠)。床の奥のふちに、壁が立ちます。

Wallを選んだまま、プロパティの検索欄に「Anchored」と入力し、Anchoredの四角を押してチェックを入れます(赤い枠)。

残りの3枚は、1枚目を複製して作ります。複製した部品は、Size・Anchoredなどの設定も同じまま増えます。エクスプローラでArenaの中の「Wall」を押して選びます。
Wallを選んだ状態で、Ctrl + Dキーを押します。同じ設定のWallが複製され、下に増えた2枚目のWallが選ばれた状態になります(赤い枠)。

2枚目のWallを選んだまま、プロパティの検索欄に「Position」と入力します。「▼CFrame」のすぐ下のPositionの欄を「0, 6.5, -49」に書きかえて、Enterキーを押します(赤い枠)。床の手前のふちに、2枚目の壁が立ちます。

2枚目のWallを選んだ状態で、もう一度Ctrl + Dキーを押します。3枚目のWallが複製され、いちばん下に増えた3枚目のWallが選ばれた状態になります。
左右の壁は向きが違うので、大きさも変えます。3枚目のWallを選んだまま、プロパティの検索欄に「Size」と入力します。Sizeの欄を「2, 12, 60」に書きかえて、Enterキーを押します(赤い枠)。

3枚目のWallを選んだまま、プロパティの検索欄に「Position」と入力します。「▼CFrame」のすぐ下のPositionの欄を「-31, 6.5, -80」に書きかえて、Enterキーを押します(赤い枠)。床の左のふちに、3枚目の壁が立ちます。

3枚目のWallを選んだ状態で、もう一度Ctrl + Dキーを押します。4枚目のWallが複製され、いちばん下に増えた4枚目のWallが選ばれた状態になります。Sizeは3枚目から複製したので、最初から「2, 12, 60」になっています。
4枚目のWallを選んだまま、プロパティの検索欄に「Position」と入力します。「▼CFrame」のすぐ下のPositionの欄を「31, 6.5, -80」に書きかえて、Enterキーを押します(赤い枠)。床が4枚の壁で囲まれます。

4枚の壁(Wall)の値をまとめると、次のとおりです。Anchoredは、4枚ともチェックが入っています。
| 壁 | Size | Position(▼CFrame のすぐ下) |
|---|---|---|
| Wall 1枚目(奥) | 64, 12, 2 | 0, 6.5, -111 |
| Wall 2枚目(手前) | 64, 12, 2 | 0, 6.5, -49 |
| Wall 3枚目(左) | 2, 12, 60 | -31, 6.5, -80 |
| Wall 4枚目(右) | 2, 12, 60 | 31, 6.5, -80 |
壁は高さ12にして、アリーナとロビーを分けています。鬼ごっこの間は、この囲いの中で逃げることになります。
3. 画面に出す文字の箱(StringValue)を入れる
エクスプローラの「Workspace」の左の「▼」を押して閉じます。「ReplicatedStorage」にマウスを乗せて、右に出る「+」を押します(赤い枠)。

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

エクスプローラでStringValueを選んだままF2キーを押し、名前を「Status」に変えます(赤い枠)。StatusのプロパティのValue(保存しておく文字の欄)は、何も入れずに空のままにしておきます。文字は、GameManagerが動き出すと自動で書き込みます。

4. ゲームの決まり(GameSettings)を作る
待つ秒数や鬼ごっこの秒数は、1つのModuleScriptにまとめます。ModuleScriptは、ほかのスクリプトから require で読み込んで使うスクリプトです。エクスプローラの「ServerStorage」にマウスを乗せて、右に出る「+」を押します(赤い枠)。

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

エクスプローラでFolderを選んだままF2キーを押し、名前を「ModuleScripts」に変えます(赤い枠)。

エクスプローラの「ModuleScripts」にマウスを乗せて、右に出る「+」を押します(赤い枠)。

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

ModuleScriptが入り、中身の画面が開きます。エクスプローラで「ModuleScript」を押して選び、F2キーを押して名前を「GameSettings」に変えます(赤い枠)。

開いているGameSettingsの画面で、中身を全部消して、次のコードを貼り付けます。
local GameSettings = {}
GameSettings.intermissionDuration = 10 -- ロビーで待つ秒数
GameSettings.matchDuration = 60 -- 鬼ごっこ1回の秒数
GameSettings.minimumPlayers = 2 -- 始めるのに必要な人数
GameSettings.transitionTime = 5 -- 結果を見せてからロビーへ戻すまでの秒数
return GameSettings
貼り付けたら、エクスプローラのModuleScriptsの中に「GameSettings」があるかを確かめます(赤い枠)。

| 決まり | 値 | 意味 |
|---|---|---|
| intermissionDuration | 10 | ロビーで数える秒数 |
| matchDuration | 60 | 鬼ごっこ1回の秒数 |
| minimumPlayers | 2 | 始めるのに必要な人数 |
| transitionTime | 5 | 結果を見せてから、ロビーへ戻すまでの秒数 |
コード内の4つの名前は、Robloxの公式のチュートリアル(バトルロイヤルのゲームの流れ)で使われている名前と同じにしています。
5. ゲームの流れを動かすスクリプト(GameManager)を入れる
エクスプローラの「ServerScriptService」にマウスを乗せて、右に出る「+」を押します(赤い枠)。

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

Scriptが入り、中身の画面が開きます。エクスプローラで「Script」を押して選び、F2キーを押して名前を「GameManager」に変えます(赤い枠)。

RunContextは、スクリプトをサーバー(ゲームの正しい状態を持っている側)と遊ぶ人のパソコンのどちらで動かすかを決めるプロパティです。GameManagerはサーバーで動かします。
エクスプローラでGameManagerを選んだ状態で、プロパティの検索欄に「RunContext」と入力します。「▼動作」の下のRunContextの欄(最初は「Legacy」)を押し、出た一覧から「Server」を選びます(赤い枠)。

開いているGameManagerの画面で、中身を全部消して、次のコードを貼り付けます。
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerStorage = game:GetService("ServerStorage")
local moduleScripts = ServerStorage:WaitForChild("ModuleScripts")
local gameSettings = require(moduleScripts:WaitForChild("GameSettings"))
local status = ReplicatedStorage:WaitForChild("Status")
local arena = workspace:WaitForChild("Arena")
local lobbySpawn = workspace:WaitForChild("SpawnLocation")
-- 体のある、生きている人だけを集める
local function getReadyPlayers()
local list = {}
for _, player in Players:GetPlayers() do
local humanoid = player.Character and player.Character:FindFirstChildOfClass("Humanoid")
if humanoid and humanoid.Health > 0 then
table.insert(list, player)
end
end
return list
end
-- 人を決めた場所へ動かす
local function moveTo(player, position)
if player.Character then
player.Character:PivotTo(CFrame.new(position))
end
end
-- ロビーへ戻す
local function sendToLobby(player)
moveTo(player, lobbySpawn.Position + Vector3.new(math.random(-6, 6), 4, math.random(-6, 6)))
end
-- メインのくり返し(待つ → 鬼ごっこ → 結果 → ロビーへ戻す)
while true do
-- 1. 人数がそろうまで待つ
repeat
local count = #getReadyPlayers()
if count < gameSettings.minimumPlayers then
status.Value = "あと " .. (gameSettings.minimumPlayers - count) .. " 人で始まります"
task.wait(1)
end
until #getReadyPlayers() >= gameSettings.minimumPlayers
-- 2. ロビーで数える
for seconds = gameSettings.intermissionDuration, 1, -1 do
status.Value = "鬼ごっこまで " .. seconds .. " 秒"
task.wait(1)
end
-- 3. 鬼を1人選んで、アリーナへ動かす
local players = getReadyPlayers()
if #players >= gameSettings.minimumPlayers then
local oni = players[math.random(1, #players)]
local runners = {}
local center = arena.Floor.Position
for _, player in players do
if player == oni then
moveTo(oni, center + Vector3.new(0, 4, -15))
else
runners[player] = true
moveTo(player, center + Vector3.new(math.random(-15, 15), 4, 15))
end
end
-- 鬼を赤く光らせて、だれが鬼か分かるようにする
local mark = Instance.new("Highlight")
mark.FillColor = Color3.fromRGB(255, 40, 40)
mark.Parent = oni.Character
local function countRunners()
local n = 0
for _ in runners do
n += 1
end
return n
end
-- 鬼にさわられた人は、つかまってロビーへ戻る
local connections = {}
for _, part in oni.Character:GetDescendants() do
if part:IsA("BasePart") then
table.insert(connections, part.Touched:Connect(function(hit)
local player = Players:GetPlayerFromCharacter(hit.Parent)
if player and runners[player] then
runners[player] = nil
sendToLobby(player)
print(player.Name .. " がつかまりました")
end
end))
end
end
-- 途中で抜けた人を数から外す
table.insert(connections, Players.PlayerRemoving:Connect(function(player)
runners[player] = nil
end))
-- 4. 時間を数える。全員つかまるか、鬼が抜けたら早く終わる
for seconds = gameSettings.matchDuration, 0, -1 do
status.Value = "鬼ごっこ中! 残り " .. seconds .. " 秒(逃げる人 " .. countRunners() .. " 人)"
if countRunners() == 0 or oni.Parent == nil then
break
end
task.wait(1)
end
-- 5. 結果を出す
if countRunners() == 0 then
status.Value = "全員つかまった! 鬼(" .. oni.DisplayName .. ")の勝ち"
else
status.Value = "逃げきった! 逃げる人の勝ち"
end
-- 6. 片付けて、全員をロビーへ戻す
for _, connection in connections do
connection:Disconnect()
end
mark:Destroy()
task.wait(gameSettings.transitionTime)
for _, player in Players:GetPlayers() do
sendToLobby(player)
end
end
end
貼り付けたら、エクスプローラのServerScriptServiceの中に「GameManager」があるかを確かめます(赤い枠)。

| コードの部分 | していること |
|---|---|
| getReadyPlayers | 体があって、体力が0より多い人だけを集める |
| moveTo・sendToLobby | 人をアリーナやロビーへ動かす。ロビーへ戻すときは、スポーン地点のまわりに少しずらして置く |
| while true do | 1〜6を上から順に行い、最後まで来たら最初に戻る。これがラウンド制のくり返し |
| repeat … until | minimumPlayersで決めた2人がそろうまで、1秒ごとに数え直す |
| math.random(1, #players) | 集めた人の中から、くじで1人を鬼にする |
| Highlight | 鬼の体を赤く光らせて、だれが鬼か分かるようにする |
| Touched | 鬼の体の部品にさわった人を、つかまえたことにしてロビーへ戻す |
| connections と Disconnect | 鬼ごっこが終わったら、さわったときのしかけを外す。外さないと、次のラウンドでも前の鬼のしかけが動く |
| for seconds = gameSettings.matchDuration, 0, -1 do | matchDurationで決めた60秒から0まで数える。逃げる人が0人になるか、鬼が抜けたら早く終わる |
6. 画面の上に文字を出す
画面に文字を出すには、ScreenGui(画面に出す文字やボタンをまとめる入れ物)の中にTextLabelを入れます。エクスプローラの「ServerStorage」の左の「▼」を押して閉じます。続けて「StarterGui」にマウスを乗せて、右に出る「+」を押します(赤い枠)。

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

エクスプローラでScreenGuiを選んだままF2キーを押し、名前を「StatusGui」に変えます(赤い枠)。

3D画面の上の作品のタブ「Place1」を押して3D画面に戻ります(タブの名前はパソコンによって違います)。エクスプローラの「StatusGui」にマウスを乗せて、右に出る「+」を押します(赤い枠)。

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

3D画面の左上に「Label」と書かれた白い四角が出ます。エクスプローラが下まで見えないときは、マウスのホイールで下へずらします。エクスプローラでTextLabelを選んだままF2キーを押し、名前を「StatusText」に変えます(赤い枠)。

StatusTextは、次の3つのプロパティを変えます。{ }の中の左の数は画面に対する割合、右の数はピクセル数です。
| プロパティ | 値 |
|---|---|
| Size | {0, 500},{0, 50} |
| Position | {0.5, -250},{0, 10} |
| TextScaled | チェックを入れる |
エクスプローラでStatusTextを選んだ状態で、プロパティの検索欄に「Size」と入力します。Sizeの欄を「{0, 500},{0, 50}」に書きかえて、Enterキーを押します(赤い枠)。{ }も一緒に入力します。横500、縦50ピクセルの横長の四角になります。

StatusTextを選んだまま、プロパティの検索欄に「Position」と入力します。Positionの欄を「{0.5, -250},{0, 10}」に書きかえて、Enterキーを押します(画像の1)。四角が、画面の上の真ん中に動きます(画像の2)。左右の真ん中(0.5)から、四角の横幅の半分(250)だけ左へずらしています。

StatusTextを選んだまま、プロパティの検索欄に「TextScaled」と入力し、TextScaledの四角を押してチェックを入れます(画像の1)。四角の大きさに合わせて、文字が大きくなります(画像の2)。

次に、Statusの文字をStatusTextに写すLocalScriptを入れます。LocalScriptは、遊ぶ人のパソコンで動くスクリプトです。エクスプローラの「StatusGui」にマウスを乗せて、右に出る「+」を押します(赤い枠)。

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

LocalScriptが入り、中身の画面が開きます。エクスプローラで「LocalScript」を押して選び、F2キーを押して名前を「StatusDisplay」に変えます(赤い枠)。

開いているStatusDisplayの画面で、中身を全部消して、次のコードを貼り付けます。
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local status = ReplicatedStorage:WaitForChild("Status")
local label = script.Parent:WaitForChild("StatusText")
-- サーバーが Status を書きかえるたびに、画面の文字も変える
local function update()
label.Text = status.Value
end
status.Changed:Connect(update)
update()
貼り付けたら、エクスプローラのStatusGuiの中に「StatusDisplay」と「StatusText」が並んでいるかを確かめます(赤い枠)。

画面の文字を書きかえるのは、遊ぶ人のパソコンで動くStatusDisplayです。GameManagerはStatusの文字を変えるだけで、StatusDisplayがその変化(Changed)に気づいて、自分の画面のStatusTextに写します。
7. 1人でテストして、待っている表示を確かめる
3D画面の上の作品のタブ「Place1」を押して3D画面に戻り、F5キーでテストを始めます(タブの名前はパソコンによって違います)。
下の画像は、1人でテストを始めた画面です。画面の上に「あと 1 人で始まります」と出ます(赤い枠)。1人ではminimumPlayersで決めた2人に足りないので、鬼ごっこは始まりません。右上の名前の欄はモザイクにしています。

「Label」のまま文字が変わらないときは、ReplicatedStorageの「Status」とStatusGuiの「StatusText」の名前を確かめます。
確かめたら、Shift + F5キーでテストを停止します。
8. 2人でテストして、鬼ごっこをする
2人で遊ぶテストは、「サーバーとクライアント」という種類のテストで行います。クライアントは、遊ぶ人1人ずつの画面のことです。
画面左上の「テスト」の右の「∨」を押し、一覧から「サーバーとクライアント」を選びます(赤い枠)。

テストの種類の欄が「サーバー…」に変わります。その右の、人の形のマークの横にある数字が人数です。最初は「0」です。数字の右の小さな上向きの矢印を2回押して、人数を「2」にします(画像の2)。人数を「2」にしたら、テストの種類の欄(画像の1)のすぐ右にある、青い三角の再生ボタンを押してテストを始めます(画像の3)。

Player1とPlayer2の窓が開きます。下の画像は、2人でテストを始めた画面で、左がPlayer1、右がPlayer2の窓です。minimumPlayersで決めた2人がそろったので、どちらの画面も上に「鬼ごっこまで 10 秒」と出ます(赤い枠)。intermissionDurationで決めた10秒から、1秒ずつ数が減ります。

0になると、2人ともアリーナへ移動します。下の画像は、移動して4秒ほどたったときの2人の画面です。上の文字は、matchDurationで決めた60秒から「鬼ごっこ中! 残り 56 秒(逃げる人 1 人)」のように1秒ずつ減ります(画像の1)。くじで選ばれた鬼は赤く光ります(画像の2)。逃げる人の画面でも、奥にいる鬼が赤く見えます(画像の3)。このテストではPlayer1が鬼になりました。くじなので、Player2が鬼になることもあります。

鬼(赤く光っている人)の窓を押してから、W・A・S・Dキーで逃げる人に近づき、体をぶつけます。
下の画像は、鬼が逃げる人にぶつかったあとの2人の画面です。さわられた人は、すぐにロビーのスポーン地点へ戻ります(画像の2)。逃げる人が0人になったので、上の文字が「全員つかまった! 鬼(Player1)の勝ち」に変わります(画像の1)。鬼の赤い光も消えます。

transitionTimeで決めた5秒がたつと、全員がロビーへ戻ります。何もしなくても、次のラウンドの「鬼ごっこまで 10 秒」が始まります。
次のラウンドでは、鬼から逃げ続けます。下の画像は、残りが 0 秒になるまでつかまらずに逃げきったときの2人の画面です。上の文字が「逃げきった! 逃げる人の勝ち」になります(赤い枠)。

以下は、アソビシフト編集部が2026年10月19日に1人と2人のテストで確かめた結果です。
| 試したこと | 結果 |
|---|---|
| 1人でテストする | 「あと 1 人で始まります」のまま始まらない |
| 2人でテストする | 「鬼ごっこまで 10 秒」→アリーナへ移動、鬼が赤く光る |
| 鬼が逃げる人にさわる | さわられた人はロビーへ戻り、「全員つかまった! 鬼(Player1)の勝ち」 |
| 残り 0 秒まで逃げきる | 「逃げきった! 逃げる人の勝ち」 |
| 結果のあと | 5秒でロビーへ戻り、次のラウンドが自動で始まる |
テストを終えるときは、もとのStudioの窓に戻り、左上の赤い丸に縦の線のボタン(マウスを乗せると「セッションを終了」と出ます)を押します。Player1とPlayer2の窓がまとめて閉じます。
秒数や人数を変えて遊びやすくする
決まりは全部GameSettingsにあるので、GameManagerを直さずに遊び方を変えられます。たとえば、鬼ごっこを2分にしてみます。
3D画面の上のタブ「GameSettings」を押して、スクリプトの画面に戻ります。中身を全部消して、次のコードを貼り付けます。matchDurationを60から120に変えています。
local GameSettings = {}
GameSettings.intermissionDuration = 10 -- ロビーで待つ秒数
GameSettings.matchDuration = 120 -- 鬼ごっこ1回の秒数
GameSettings.minimumPlayers = 2 -- 始めるのに必要な人数
GameSettings.transitionTime = 5 -- 結果を見せてからロビーへ戻すまでの秒数
return GameSettings
| 変えたいこと | 直す決まり | 例 |
|---|---|---|
| 鬼ごっこを長くする | matchDuration | 120(2分) |
| ロビーで待つ時間を短くする | intermissionDuration | 5 |
| 3人そろうまで始めない | minimumPlayers | 3 |
| 結果を長く見せる | transitionTime | 8 |
minimumPlayersを1にすると1人でも始まります。ただし鬼しかいないので、GameManagerの作りでは逃げる人が最初から0人になり、すぐに結果へ進みます。鬼ごっこは2人以上で試します。
鬼ごっこが動かないときの確かめ方
| 症状 | 見るところ | 直し方 |
|---|---|---|
| 上の文字が「Label」のまま | ReplicatedStorageのStatus、StatusGuiのStatusText | 名前が1文字でも違うと見つけられない。大文字・小文字まで同じにする |
| 2人いても始まらない | GameManagerの置き場所と出力の欄 | ServerScriptServiceの中にあるか。出力の欄に赤い文字が出ていないか |
| アリーナへ移動しない | WorkspaceのArenaとFloor | 名前が「Arena」「Floor」か。FloorがArenaの中に入っているか |
| ロビーへ戻らない | WorkspaceのSpawnLocation | 最初から入っている白い板の名前を変えたり消したりしていないか |
| さわってもつかまらない | 鬼と逃げる人のどちらの窓か | 鬼は赤く光っている人。くじなので、窓ごとに確かめる |
| 床が落ちる・壁が倒れる | FloorとWallのAnchored | Floor1つとWall4枚の、5つともチェックが入っているか |
出力の欄に赤い文字が出たときは、スクリプトが動かないときの確認手順で読み方を解説しています。
AIに相談するときの伝え方
Roblox Studioで鬼ごっこを作っています。
ServerScriptServiceのScript「GameManager」が、while true doのくり返しで「人数を待つ→ロビーで数える→鬼を1人選んでWorkspaceのArenaへ動かす→鬼にさわられた人をロビーへ戻す→結果をReplicatedStorageのStringValue「Status」に書く」を行っています。
秒数はServerStorageのModuleScript「GameSettings」にあります。
鬼にさわられた人が、つかまった人から次の鬼になる「増え鬼」にしたいです。
よくある質問
3人以上でも遊べる?
GameManagerは人数を決めずに書いてあり、鬼は1人、残りが全員逃げる人になります。3人以上で試すときは、テストの種類を「サーバーとクライアント」にしたまま、人の形のマークの横の人数を「3」にしてから再生ボタンを押します。
つかまった人を、ロビーではなくアリーナに残したい
GameManagerの part.Touched:Connect の中で、runners[player] = nil のすぐ下にある sendToLobby(player) が、つかまった人をロビーへ戻している1行です。この1行だけを消すと、つかまった人はアリーナに残ります。ラウンドの最後に全員をロビーへ戻す、for _, player in Players:GetPlayers() do の中の sendToLobby(player) は消さずに残します。逃げる人の数からは外れるので、ラウンドの終わり方は変わりません。
次は、スマホでも崩れないタイトル画面を作ります。次のステップ(上級 8/42)
次に知りたいことを選ぶ
- 次のステップ:スマホでも崩れないタイトル画面を作ります → ロブロックス(Roblox)スタジオのUIの作り方
- 人を別の場所へ動かすしかけを知りたい → ロブロックス(Roblox)でテレポートを作る方法
- 時間で敵が増えるゲームを作りたい → ロブロックス(Roblox)スタジオでタワーディフェンスを作る方法【前編】
- チームに分かれて遊ぶゲームにしたい → ロブロックス(Roblox)でチームを作る方法