「オビーで途中まで進んだのに、落ちるたびに最初からになってしまう」「チェックポイントってどうやって作るの?」
ロブロックス(Roblox)のチェックポイントの作り方を、実際の画像付きで誰でも簡単に分かるように解説します。この記事では、スタート→チェックポイント1→2の順に触れると、倒れてもその場所から復活できる仕組みを作ります。前の地点に戻っても記録が巻き戻らないこと、2人で遊んでも記録が混ざらないことまで確かめましょう。
入門ステップ13/24 前の記事:ロブロックス(Roblox)ゲームのサムネイルの作り方 全体の順番を見る
使うもの:Roblox Studioが起動するパソコン、マウス、キーボード。フォルダーの作り方や部品の複製のしかたはオビーの作り方で画像付きで解説しています。
今回の完成状態:下の画像のように、チェックポイント1に触れたあとで倒れても、スタートではなくチェックポイント1の上から始まれば成功です。

チェックポイントの仕組み
ロブロックスでは、アバターが現れる場所を「SpawnLocation(スポーン地点)」という部品で決めます。チェックポイントは、その人が次に復活する場所(RespawnLocation)を、触れたSpawnLocationに書きかえることで作ります。
今回の決まりは次の6つです。
| 場面 | 今回の動き |
|---|---|
| 初めて参加する | スタートから始まる |
| チェックポイント1に触れてから倒れる | 1から復活する |
| 2まで進んでから1に戻る | 復活する場所は2のまま |
| 1を通らずに2に触れる | 2は記録しない |
| Aさんだけが1に触れる | Bさんの復活する場所は変わらない |
| ゲームから抜けて入り直す | スタートに戻る |
1. 復活地点を3つ用意する
新しいBaseplateを開き、エクスプローラの「Workspace」にマウスを乗せて、右に出る「+」(赤い枠)を押してください。画像の赤い枠が「次に押す場所」で、画像を押すと大きく表示できます。ボタンの名前や置き場所は、Roblox側の更新で変わることがあります。

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

エクスプローラにできた「Folder」を右クリックして「名前を変更」(赤い枠)を押し、「Checkpoints」と入れてください。

次にエクスプローラの「SpawnLocation」をつかんで「Checkpoints」の上で離し、フォルダーの中に入れてください。

エクスプローラで「Checkpoints」の中の「SpawnLocation」を選び、F2キーを押して「StartSpawn」と入力し、Enterキーを押します。
エクスプローラで「StartSpawn」を選んだ状態で、プロパティの検索欄に「Size」と入力します。Sizeの欄を「10, 1, 10」に変えて、Enterキーを押します(赤い枠)。

続けて「StartSpawn」を選んだまま、プロパティの検索欄に「Position」と入力します。「Position」はいくつか出てくるので、「▼CFrame」のすぐ下にあるPositionを「0, 2, 0」に変えて、Enterキーを押します(赤い枠)。

次に、StartSpawnを複製してCheckpoint1を作ります。エクスプローラで「StartSpawn」を選んだ状態でCtrl+Dキーを押すと、Checkpointsの中に同じ名前の「StartSpawn」がもう1つでき、新しくできた方が選ばれた状態になります(赤い枠)。

新しくできた方を選んだままF2キーを押し、「Checkpoint1」と入力してEnterキーを押します(画像の1)。
続けて「Checkpoint1」を選んだまま、プロパティの検索欄に「Position」と入力し、「▼CFrame」のすぐ下のPositionを「20, 2, 0」に変えてEnterキーを押します(画像の2)。

最後にCheckpoint2を作ります。エクスプローラで「Checkpoint1」を選んだ状態でCtrl+Dキーを押すと、Checkpointsの中に「Checkpoint1」がもう1つでき、新しくできた方が選ばれた状態になります(赤い枠)。

新しくできた方を選んだままF2キーを押し、「Checkpoint2」と入力してEnterキーを押します(赤い枠)。

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

次の画像のように、スポーン地点の板が3枚、間をあけて並べば準備は完了です。

普通のPartに「Checkpoint1」と名前を付けても、チェックポイントにはなりません。必ずSpawnLocationを複製して作ります。
| 名前 | 種類 | 大きさ(Size) | 位置(Position) |
|---|---|---|---|
| StartSpawn | SpawnLocation | 10, 1, 10 | 0, 2, 0 |
| Checkpoint1 | SpawnLocation | 10, 1, 10 | 20, 2, 0 |
| Checkpoint2 | SpawnLocation | 10, 1, 10 | 40, 2, 0 |
2. チェックポイントのスクリプトを入れる
エクスプローラの「ServerScriptService」にマウスを乗せて、右に出る「+」(赤い枠)を押してください。

一覧の「Script」(赤い枠)を押します。

エクスプローラにできた「Script」を選んだ状態でF2キーを押し、「CheckpointController」と入力してEnterキーを押します。
続けて「CheckpointController」を選んだまま、プロパティの検索欄に「RunContext」と入力し、RunContextの一覧から「Server」(赤い枠)を選びます。RunContextは、スクリプトをサーバーとプレイヤーのどちらで動かすかを決める設定です。

CheckpointControllerをダブルクリックして開き、中身を全部消して、次のコードを貼り付けます。コード欄の右上の「コピー」を押すと、まとめてコピーできます。
local Players = game:GetService("Players")
local folder = workspace:WaitForChild("Checkpoints")
local start = folder:WaitForChild("StartSpawn")
local points = {
folder:WaitForChild("Checkpoint1"),
folder:WaitForChild("Checkpoint2"),
}
local stages = {}
local function configure(spawn)
assert(spawn:IsA("SpawnLocation"), spawn.Name .. "はSpawnLocationが必要です")
spawn.Anchored = true
spawn.CanCollide = true
spawn.CanTouch = true
spawn.Enabled = true
spawn.Neutral = true
spawn.AllowTeamChangeOnTouch = false
end
configure(start)
for _, point in points do configure(point) end
local function setup(player)
if stages[player] ~= nil then return end
stages[player] = 0
player.RespawnLocation = start
player:SetAttribute("CheckpointStage", 0)
end
Players.PlayerAdded:Connect(setup)
Players.PlayerRemoving:Connect(function(player) stages[player] = nil end)
for _, player in Players:GetPlayers() do setup(player) end
for index, point in points do
point.Touched:Connect(function(hit)
local character = hit:FindFirstAncestorOfClass("Model")
local player = character and Players:GetPlayerFromCharacter(character)
local humanoid = character and character:FindFirstChildOfClass("Humanoid")
if not player or not humanoid or humanoid.Health <= 0 then return end
local current = stages[player]
if current == nil or index ~= current + 1 then return end
stages[player] = index
player.RespawnLocation = point
player:SetAttribute("CheckpointStage", index)
print(player.Name, "チェックポイント", index)
end)
end

コードの中の「stages[player]」は、人ごとに「どこまで進んだか」の番号を持つ入れ物です。「index ~= current + 1」は、次の番号のチェックポイント以外は記録しないという決まりです。そのため、前の地点に戻ったり、順番を飛ばしたりしても記録は変わりません。
3. 1人でテストして、復活する場所を確かめる
3D画面の上の作品のタブ「Place8」(赤い枠)を押して3D画面に戻り、F5キーでテストを始めます(タブの名前はパソコンによって違います)。アバターはStartSpawnの上に出てきます。


Dキーで右へ歩いて、チェックポイント1の板に乗ってみましょう。下の出力に「(アカウント名) チェックポイント 1」と出れば、記録できています。
出力欄が開いていないときは、3D画面上部メニューの「ウィンドウ」を押し、一覧の「出力」(赤い枠)を押して開きます。


本当にそこから復活するかを確かめます。少し歩いて板から降りたら、Escキーを押します。ロブロックスのメニューが開くので、下の「リスポーン」(赤い枠)を押します。リスポーンは、アバターを倒して出し直す操作です。

「キャラクターをリスポーンしてよろしいですか?」と出たら、「リスポーン」を押します。

数秒後、アバターがスタートではなくチェックポイント1の上に出てくれば成功です。

前に戻っても巻き戻らないか
続けてチェックポイント2まで歩き、出力に「(アカウント名) チェックポイント 2」と出たら、チェックポイント1まで歩いて戻ります。そこでリスポーンすると、戻った1ではなく2の上から始まります。

順番を飛ばすと記録されないか
Shift + F5キーでテストを停止します。3D画面の上の作品のタブ「Place8」を押して3D画面に戻り、F5キーでテストを始めます(タブの名前はパソコンによって違います)。テストを止めるとゲームから抜けたのと同じになるので、アバターはまたStartSpawnの上に出てきます。
今度はチェックポイント1に触れずに、チェックポイント2へ乗ります。W・A・S・Dキーで歩き、チェックポイント1の板には乗らずに奥側を回り込んで、チェックポイント2の板に乗ります。出力には何も出ません。

ここでリスポーンすると、スタートの上に戻ります。順番どおりに進んだときだけ記録されることが確かめられました。

4. 2人でテストして、記録が混ざらないか確かめる
2人でテストする前に、手順3の1人用のテストを終わらせておきます。画面左上の赤い四角の「停止」ボタン(赤い枠)を押すか、Shiftキーを押しながらF5キーを押すと、いつもの編集画面に戻ります。テスト中は「テスト」のメニューが灰色になって選べないので、必ず止めてから次へ進んでください。

画面左上の「テスト」の右の「∨」を押し、一覧から「サーバーとクライアント」(赤い枠)を選びます。

人数の上向き三角(画像の1)を押して「2」にし、青い再生ボタン(画像の2)を押してください。

しばらく待つと、元のStudioの窓とは別に、「サーバー」の窓と、Player1・Player2のテストの窓が開きます。テストの窓の右上の一覧では、その窓の人の名前が白く、もう1人の名前は灰色で出ます。これで、どちらがPlayer1の窓かを見分けます。一覧が出ていないときは、窓の3D画面を1回押してからTabキーを押します。
- Player1の窓を押して前に出し、Dキーで右へ歩いてチェックポイント1に乗ります。
- Player1の窓のままEscキーを押し、「リスポーン」を押します。確認が出たら、もう一度「リスポーン」を押します。
- Player2の窓を押して前に出し、Escキーを押して「リスポーン」を押します。確認が出たら、もう一度「リスポーン」を押します。
下の画像は、2つの窓を左右に並べたものです。左がPlayer1、右がPlayer2です。Player1は1の上、Player2はスタートの上から始まれば、人ごとに記録が分かれている証拠です。

確かめたら、元のStudioの窓の左上の赤い丸の「終了」ボタン(赤い枠)で2人のテストを閉じます。

チェックポイントが動かないときの直し方
| 困ったこと | 確かめること | 直し方 |
|---|---|---|
| 出力に「SpawnLocationが必要です」と出る | 普通のPartで作っていないか | SpawnLocationを複製して作り直す |
| 出力に名前を待つ警告が出る | 「Checkpoints」と中の3つの名前が同じか(大文字・小文字も) | エクスプローラで名前を直す |
| 触れても「チェックポイント」と出ない | 順番どおりに触れたか。RunContextが「Server」か | スタートから順番に触れる。エクスプローラでCheckpointControllerを選び、プロパティの検索欄に「RunContext」と入力して「Server」を選ぶ |
| 出力には出るのに違う場所で復活する | 記事のコードを全部貼り付けたか(コードの configure の部分が、板の Enabled と Neutral を自動で入れます) | CheckpointControllerの中身を全部消して、記事のコードを貼り直す |
| 2人が同じ場所に戻る | コードの「stages[player]」を書きかえていないか | 記事のコードに戻す |
AIでチェックポイントを増やすとき
チェックポイントを3つ目、4つ目と増やしたいときは、AIに次のように頼みます。
Roblox Studioで、StartSpawn→Checkpoint1→Checkpoint2の順に進むチェックポイントを作りました。
復活する場所はPlayer.RespawnLocationで決めています。
今のコードを貼るので、Checkpoint3を追加する最小の変更を教えてください。
前の地点に戻っても巻き戻らない、人ごとの記録が混ざらない、抜けたら最初に戻る、という決まりは変えないでください。
よくある質問
ゲームから抜けても続きから遊べるようにできる?
できますが、今回のコードではできません。今回の記録はゲームに入っている間だけのもので、抜けると消えます。次の日も続きから遊べるようにするには、どのチェックポイントまで進んだかを「DataStore」というデータ保存の仕組みで残し、次に入ったときにその板を復活場所にします。数字の保存と読み込みはDataStoreの使い方で解説しています。
チェックポイントの板の色や模様は変えられる?
もちろん変えられます。模様は、エクスプローラで「Checkpoint1」の左の▶を押して開き、中の「Decal」を選んでDeleteキーを押すと消えます。色は、板を選んだ状態でプロパティの検索欄に「Color」と入力し、Colorの欄で変えます。どれがチェックポイントか分かるように、スタートと色を変えておくと遊ぶ人が迷いません。
次のステップ(入門 14/24)
次は、押すと開く「遊び方」のボタンを画面に付けます。
次に知りたいことを選ぶ
- 次のステップ:押すと開く「遊び方」のボタンを画面に付けます → ロブロックス(Roblox)スタジオでボタンを作る方法
- 作ったゲームを友達に遊んでもらいたい → ロブロックス(Roblox)のゲームを公開する方法
- Studioの操作で困っている → Robloxで困ったとき