体験申込で

Amazonギフト

カードもらえる

体験申込・無料相談

News

お知らせ

ロブロックススタジオのリスポーン設定方法を3ステップで解説

コラム

Roblox Studio(ロブロックススタジオ)で自分のゲームを作っていて、「死んだ後に変な場所に戻される」「リスポーン地点を自分で決めたい」と困ったことはありませんか。

SpawnLocationというオブジェクトを置くだけだと聞いたのに、いざ配置してみても思った通りに動かない。チェックポイントを作りたいのにスクリプトの書き方が分からない。そんなつまずきは、Roblox Studioを始めたばかりの人ほどよくある悩みです。

この記事では、SpawnLocationを置くだけの基本設定から、複数地点を切り替えるチェックポイント式、水中落下時に自動でリスポーンさせる応用実装までを3つのステップで解説します。あわせて、「配置したのに反応しない」「リスポーン後にGUIが二重になる」といった、初心者が実際につまずきやすいエラーの直し方もまとめました。

Roblox公式のCreator Hub(create.roblox.com/docs)が公開しているスポーン・リスポーンのチュートリアルをもとにしているので、情報の古さを気にせず読み進められます。

リスポーン(respawn)とは?ゲームでの役割

リスポーンとは、プレイヤーのキャラクターが倒れたりゲームに参加したりしたときに、決められた地点へ再配置される仕組みです。Roblox Studioでは、この地点を何も設定しないと、初期状態のワークスペース原点付近にランダムで配置されてしまいます。

  • ゲーム開始時の初期スポーン地点を決めたいなら、SpawnLocationを1つ置くだけで解決する
  • ステージが進むごとにリスポーン地点を切り替えたいなら、チェックポイント式の仕組みが必要になる
  • 水中に落ちた・特定エリアに入ったなど条件付きでリスポーンさせたいなら、判定用のスクリプトを組み合わせる

同じ「リスポーン」でも、実現したいことによって必要な作業量がまったく違います。次の章から、基本・応用の順に実装方法を見ていきましょう。

【STEP1】SpawnLocationでリスポーン地点を設定する

もっとも簡単なリスポーン設定は、SpawnLocationというオブジェクトをワークスペースに1つ置くだけで完成します。スクリプトは一切不要です。

ワークスペース(Workspace)への配置手順

  1. Studio上部の「Model」タブを開き、「Spawn」ボタンをクリックする
  2. ワークスペースにSpawnLocation(緑色の四角い床)が生成される
  3. プレイヤーを立たせたい位置までドラッグして移動させる
  4. プレイテスト(F5キー)で、指定した位置からスタートするか確認する

配置する場所は、地面から少し浮かせすぎないことがコツです。床に埋まった状態だと、リスポーン直後にキャラクターが弾き飛ばされることがあります。

SpawnLocationのプロパティ設定

SpawnLocationを選択した状態でプロパティウィンドウを開くと、以下の項目を調整できます。

  • Enabled:オフにすると、このSpawnLocationは使われなくなる
  • Neutral:オンにすると、チーム分けなしの1人用ゲームでも問題なく機能する
  • Duration:リスポーン直後に無敵状態でいる秒数(初期値は0)

チーム機能を使わないゲームを作っている場合、Neutralを必ずオンにするのが基本です。オフのままだと、プレイヤーがどのチームにも所属していないためリスポーンできず、ワークスペース原点に飛ばされる原因になります。

【STEP2】チェックポイント式リスポーンを作る

ステージ制のゲームでは、「ここまで進んだらそこからやり直せる」チェックポイントが欠かせません。

SpawnLocationを増やさずに済む仕組み

チェックポイントというと、SpawnLocationを何個も置いて有効・無効を切り替える実装をよく見かけます。ただこの方法は、SpawnLocationの数が増えるほど管理が煩雑になり、有効化し忘れによるバグが起きやすい欠点があります。

代わりに使えるのが、Player(プレイヤー)インスタンスが持つRespawnLocationプロパティです。これは「次に生き返る場所」を指定する公式のプロパティで、通常のPart(透明な当たり判定でも構いません)を割り当てるだけでリスポーン地点を上書きできます。SpawnLocationのEnabled切り替えが不要になるぶん、コードもシンプルになります。

触れたらリスポーン地点を切り替えるスクリプト

ワークスペースに「Checkpoints」というフォルダを作り、通過させたいチェックポイントとなるPartをその中にまとめて配置します。ServerScriptServiceに以下のスクリプトを追加してください。

local checkpointsFolder = workspace:WaitForChild("Checkpoints")

for _, checkpoint in ipairs(checkpointsFolder:GetChildren()) do
	checkpoint.Touched:Connect(function(hit)
		local character = hit.Parent
		local player = game.Players:GetPlayerFromCharacter(character)

		if player then
			player.RespawnLocation = checkpoint
		end
	end)
end

GetPlayerFromCharacterでnilチェックを挟んでいるのは、プレイヤー以外のパーツ(モンスターや障害物など)が触れたときに誤作動しないようにするためです。この一行を省略すると、無関係なパーツの接触でエラーが出ることがあります。

チェックポイントの数は自由に増やせます。プレイヤーが最後に触れたチェックポイントが自動的に次のリスポーン地点になるため、SpawnLocationのEnabled管理は一切不要です。

 

 

【STEP3】ワープや特定条件でリスポーン地点を動的に変える

チェックポイントよりさらに一歩進んで、「条件を満たしたときだけリスポーン地点を変える」実装を見ていきます。

TeleportServiceとの使い分け

ここで混同しやすいのが、RespawnLocationとTeleportServiceの違いです。

プロパティ・API 役割
Player.RespawnLocation 同じゲーム内で次に生き返る場所を指定する
TeleportService プレイヤーを別のゲーム(プレース)へ送る

「ワープ」という言葉は両方に使われがちですが、同じゲーム内の移動ならRespawnLocation、別のゲームへ送るならTeleportServiceと覚えておけば迷いません。

水中に落下したら自動リスポーンさせる実装例

オブジェクトゲームなどで、水中や奈落に落ちたら自動でリスポーンさせたい場面は多いはずです。以下は、キャラクターのY座標を監視して、一定より下に落ちたら強制的にリスポーンさせるスクリプトです。

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")

local FALL_LIMIT_Y = -10 -- この高さより下に落ちたらリスポーンさせる

Players.PlayerAdded:Connect(function(player)
	player.CharacterAdded:Connect(function(character)
		local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
		local hasRespawned = false

		local connection
		connection = RunService.Heartbeat:Connect(function()
			if hasRespawned then
				return
			end

			if humanoidRootPart.Position.Y < FALL_LIMIT_Y then
				hasRespawned = true
				connection:Disconnect()
				player:LoadCharacter()
			end
		end)
	end)
end)

hasRespawnedというフラグを用意しているのは、LoadCharacterを呼んだ直後にもう一度同じ判定が走って二重にリスポーンが発生するのを防ぐためです。この一行がないと、まれに古いキャラクターの座標を拾って無限リスポーンのような挙動になることがあります。

FALL_LIMIT_Yの値は、マップの水面や谷底のY座標に合わせて調整してください。あらかじめSTEP2のチェックポイントでplayer.RespawnLocationを更新しておけば、この自動リスポーンも最新のチェックポイントから再開されます。

リスポーンで起きる不明なエラーと解決法

コードの書き方は合っているのに動かない、という相談で特に多いのが次の2つです。

SpawnLocationが機能しない原因と対処

症状 原因 対処法
リスポーンしても原点に戻される SpawnLocationのNeutralがオフのまま プロパティでNeutralをオンにする
一部のプレイヤーだけ違う場所に出る SpawnLocationが複数あり、有効なものがランダムに選ばれている STEP2のRespawnLocationで明示的に指定する
attempt to index nil value エラー ワークスペースのパーツ名とスクリプト内の名前が一致していない WaitForChildの引数と実際のオブジェクト名を完全に一致させる

リスポーン後にGUIが重複するバグの直し方

体力バーやスコア表示のGUIが、リスポーンのたびに増えていく不具合もよくある相談です。原因の多くは、StarterGui内のScreenGuiにあるResetOnSpawnプロパティの扱いです。

ResetOnSpawnがオンのままだと、リスポーンのたびにGUIが複製されて重なって表示されます。スクリプト側でGUIの状態を管理している場合は、ScreenGuiのResetOnSpawnをオフにし、代わりにplayer.CharacterAddedイベントの中で表示内容を更新する処理を1つだけ用意してください。

ResetOnSpawnをオフにするだけで解決するケースが大半なので、GUIの重複に悩んだらまずここを確認しましょう。

関連設定:リスポーン後もカメラを一人称視点で固定する

リスポーンさせるキャラクターを一人称視点(FPS視点)で固定したいゲームも少なくありません。ただし、カメラ設定はキャラクターが生成されるたびにリセットされる点に注意が必要です。

local Players = game:GetService("Players")

Players.PlayerAdded:Connect(function(player)
	player.CharacterAdded:Connect(function()
		player.CameraMode = Enum.CameraMode.LockFirstPerson
	end)
end)

CharacterAddedイベントの中でCameraModeを設定しているのは、リスポーンのたびにキャラクターが新しく生成され、それに伴ってカメラ設定も初期値に戻ってしまうためです。1回だけ設定して満足していると、2回目以降のリスポーンで三人称視点に戻ってしまうので気をつけてください。

よくある質問(FAQ)

Q1. SpawnLocationを置いたのにリスポーンが元の場所に戻ってしまうのはなぜですか?

SpawnLocationのNeutralプロパティがオフになっている可能性が高いです。チーム機能を使わないゲームでは、Neutralを必ずオンにしてください。

Q2. 複数のスポーン地点のうち、特定の地点だけでリスポーンさせるにはどうすればいいですか?

SpawnLocationのEnabled/Neutralで管理するより、Player.RespawnLocationに目的のPartを直接代入する方法がシンプルです。STEP2のチェックポイントスクリプトを参考にしてください。

Q3. リスポーン後にGUIが2枚重なって表示されるのはなぜですか?

ScreenGuiのResetOnSpawnがオンになっていることが原因です。オフにしたうえで、CharacterAddedイベントの中で表示を更新する処理に統一すると解決します。

Q4. スクリプトを書いたら「不明なエラー」が出て動かないのですが?

多くの場合、パーツ名の綴りミスか、WaitForChildを使わずに読み込み前のオブジェクトへアクセスしていることが原因です。Output(出力)ウィンドウのエラー文に表示される行番号から、該当するオブジェクト名を確認してください。

Q5. ゲーム開始時の初期スポーン位置を変えるにはどうすればいいですか?

ワークスペースに配置したSpawnLocationの位置を動かすだけで変更できます。STEP1の手順を参考に、SpawnLocationをドラッグして希望の位置に移動させてください。

 

 

まとめ

この記事では、Roblox Studioでリスポーン地点を設定する3つのステップを解説しました。

重要なポイント:

  • 初期スポーン地点はSpawnLocationを1つ置くだけで設定でき、Neutralを必ずオンにする
  • チェックポイント式にするなら、SpawnLocationを増やすよりPlayer.RespawnLocationを使う方がシンプル
  • 水中落下などの条件付きリスポーンは、座標を監視してLoadCharacterで発火させる
  • GUIの重複バグは、ScreenGuiのResetOnSpawnを見直すだけで解決することが多い
  • 一人称視点などのカメラ設定は、CharacterAddedのたびに再設定が必要

どのステップも数行のコードで実装できますが、「なぜそのプロパティが必要なのか」を理解しているかどうかで、トラブルに直面したときの対応力が大きく変わります。まずはSTEP1のSpawnLocation設置から試して、動きの仕組みを体感してみてください。

TETRA UPのRobloxコースでは、こうしたスクリプトの基礎から一つずつ、プロのインストラクターと一緒に手を動かしながら学べます。オリジナルのステージやチェックポイントを、自分の力で作ってみませんか。

 

 

あわせて読みたい

コラム