本文へスキップ
Roblox基礎

Robloxでチェックポイントを作る|触れた場所からリスポーンする

Roblox StudioでSpawnLocationとサーバーのScriptを使い、プレイヤーごとに復活地点を記録します。配置・接触判定・多重通知の防止・2人での確認を図とコードで解説します。

公開日: 2026-10-24#Roblox#Luau#SpawnLocation#チェックポイント#初心者
ガイドキャラクター
Roblox StudioでSpawnLocationとサーバーのScriptを使い、プレイヤーごとに復活地点を記録します。配置・接触判定・多重通知の防止・2人での確認を図とコードで解説します。
学習者キャラクター
準備するものと、動作確認で見る結果を先に確認してから進めます。
Robloxでチェックポイントを作る|触れた場所からリスポーンするの手順と判断条件を示す説明図
仕組みを説明する模式図です。エディタのスクリーンショットではありません。小さい画面では横にスクロールできます。設定値と手順は本文で確認してください。

この記事で作るもの

スタート地点から移動し、青いチェックポイントに触れると、次に倒れたときはそこから復活する仕組みを作ります。Roblox Studioの標準キャラクターと、自動リスポーンが有効な新規Baseplateを前提にします。

復活先はPlayer.RespawnLocationへ記録します。プレイヤーAがチェックポイントへ到達しても、プレイヤーBの復活先は変えません。接触判定と記録は、サーバー側のScriptで行います。

1. SpawnLocationを2つ置く

新規BaseplateにあるSpawnLocationをStartSpawnへ改名し、もう1つSpawnLocationを追加してCheckpointSpawnと名付けます。通常のPartではなく、SpawnLocation型であることを確認してください。

PropertiesStartSpawnCheckpointSpawn
ParentWorkspace直下Workspace直下
Position(0, 0.5, 0)(0, 0.5, -20)
Size(6, 1, 6)(6, 1, 6)
Anchoredオンオン
CanCollide / CanTouch両方オン両方オン
Enabled / Neutral両方オン両方オン
AllowTeamChangeOnTouchオフオフ
色白など青など見分けやすい色

SpawnLocationの上にほかのPartを重ねず、キャラクターの足で直接触れられるようにします。この例ではTeamsを作らず、Neutralのスポーン地点を使います。SpawnLocationの公式資料

Positionの数値は、Baseplateの上面がY=0の場合です。床の高さを変えている場合は、各SpawnLocationの底面が床の上に来るようにYも調整します。また、不要な別のSpawnLocationは追加せず、ここではこの2つで確かめます。

Explorerは次の構成になります。CheckpointServerはServerScriptServiceに追加する通常のScriptです。LocalScriptにはしません。

Workspace
  Baseplate
  StartSpawn (SpawnLocation)
  CheckpointSpawn (SpawnLocation)
ServerScriptService
  CheckpointServer (Script)

2. サーバーで復活先を記録する

CheckpointServerへ次のコードを貼り付けます。スポーン地点の名前を変えた場合は、コード内の名前も合わせます。

local Players = game:GetService("Players")

local startSpawn = workspace:WaitForChild("StartSpawn")
local checkpointSpawn = workspace:WaitForChild("CheckpointSpawn")

assert(startSpawn:IsA("SpawnLocation"), "StartSpawnはSpawnLocationにしてください")
assert(checkpointSpawn:IsA("SpawnLocation"), "CheckpointSpawnはSpawnLocationにしてください")

local function preparePlayer(player)
    player.RespawnLocation = startSpawn
end

Players.PlayerAdded:Connect(preparePlayer)
for _, player in Players:GetPlayers() do
    preparePlayer(player)
end

checkpointSpawn.Touched:Connect(function(hit)
    local character = hit:FindFirstAncestorOfClass("Model")
    if not character then
        return
    end

    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.RespawnLocation == checkpointSpawn then
        return
    end

    player.RespawnLocation = checkpointSpawn
    print(player.Name .. " のチェックポイントを更新しました")
end)

参加したプレイヤーには最初にStartSpawnを割り当てます。接触時は、触れたPartからキャラクターをたどり、実際のプレイヤーか、キャラクターが生きているかを確認してから更新します。

Touchedは体の複数のPartから通知されることがあります。すでに同じ復活先なら戻る条件を入れることで、立ち続けていても到達ログを繰り返し出さない形にしています。全員で共有する1個のフラグを使わないため、あとから来た別のプレイヤーも到達できます。

RespawnLocationを変えても、その瞬間にキャラクターは移動しません。変わるのは次回の復活先です。リスポーンそのものは標準の仕組みに任せます。Player.RespawnLocationの公式資料

3. 1人で復活位置を確認する

  1. 実行中ならStopし、スクリプトを保存してからPlay相当のテスト(現行UIではTest、F5)で入り直します。Test Hereはカメラ付近から始まるため、最初の出現位置の確認には使いません。キャラクターを作らないRunでも確認できません。
  2. スタート地点から青いCheckpointSpawnまで歩き、直接その上に乗ります。
  3. OutputでServer側のメッセージが見えるようにし、自分の名前を含む到達ログが出ることを確認します。立ち続けても同じログが増え続けないことも確認します。
  4. テスト中のキャラクターをリセットし、標準の復活待ち時間の後、CheckpointSpawnから復活することを確認します。
  5. StartSpawnへ戻ってからもう一度リセットします。この例ではスタート地点に触れる処理を登録していないので、復活先はチェックポイントのままです。

4. 2人の復活先を比べる

1人テストをStopしてから、StudioのテストモードでServer & Clientsを選び、クライアント数を2にして開始します。同じローカルサーバーへ2人が接続した状態で、片方だけが青い地点へ移動し、それぞれのキャラクターをリセットして確認します。別々に1人テストを2回起動しても、同じサーバーでの比較にはなりません。テストモードの公式資料

プレイヤー青い地点への到達次の復活先
A到達済みCheckpointSpawn
B未到達StartSpawn
Bその後に到達CheckpointSpawn

この例は床の色をプレイヤー別には変更しません。青い床は常に青いままで、到達の確認はOutputと実際の復活位置で行います。

プロパティも見る場合は、テストのServer側でExplorerのPlayersを開き、各PlayerのRespawnLocationを確認します。AはCheckpointSpawn、未到達のBはStartSpawnというように、値が別々になっていることを確かめます。

うまく動かないとき

  • WaitForChildの警告が出る:Workspace直下の名前がStartSpawn・CheckpointSpawnと完全一致するか確認します。
  • 触れてもログが出ない:CanTouchがオンか、床の装飾ではなくSpawnLocation本体へ歩いて接触しているか確認します。Touchedは物理的な接触を使うので、位置をコードで重ねるだけの確認とは分けます。BasePart.Touchedの公式資料
  • 違う場所へ復活する:EnabledとNeutralを確認し、ほかのスクリプトがRespawnLocationやキャラクター生成を変更していないか調べます。
  • スタート地点から始まらない:配置とScriptを編集した後にStopしてPlayをやり直します。動作中にScriptを追加した場合、すでに出現しているキャラクターの位置は変わりません。

この例の記録範囲

復活先は今回のプレイ中だけの記録です。退出後や新しいテストの開始後まで到達状態を残すには、DataStoreなどを使う別の保存設計が必要です。また、不正な移動を判定する仕組みや、複数チェックポイントの順番制御は含めていません。

床の設定が不安ならPartとAnchoredの基本、プレイヤーごとの値を表示したい場合はleaderstatsの基本へ進めます。

学習者キャラクター
今回の内容で覚えておくポイントを確認したいです。
ガイドキャラクター
Roblox StudioでSpawnLocationとサーバーのScriptを使い、プレイヤーごとに復活地点を記録します。配置・接触判定・多重通知の防止・2人での確認を図とコードで解説します。
この記事のまとめを案内するガイドキャラクター

この記事のまとめ

Roblox StudioでSpawnLocationとサーバーのScriptを使い、プレイヤーごとに復活地点を記録します。配置・接触判定・多重通知の防止・2人での確認を図とコードで解説します。