Roblox Studio · 第 11 课

检查点:失败后从这里再出发

用 SpawnLocation 与 RespawnLocation 保存本次游戏的检查点,测试重生与重新进入的区别。

10–15 岁 60 分钟 SpawnLocation 动手实践 测试与保存

Course overview

走到检查点后,失败也不用从最远处重来。

一条有挑战的路线,也可以对玩家很友好。检查点能记住这次游戏里你走到了哪里,让失败变成一次短短的重试。

这一课不靠移动相机制造“重生效果”,而是使用 Roblox 的 SpawnLocation 和玩家的 RespawnLocation。

01 · BEFORE

开始之前

会搭建平台,理解 Player 与 Character。使用独立 Lesson11 Baseplate。

02 · MAKE

你的作品

一个起点和一个可激活的检查点,两处都能正确出生。

03 · CHECK

完成标志

先在起点出生,激活后重生在检查点;另一名玩家不会被一起更改。

在场景中摆放两个 SpawnLocation 的官方截图
图 11-1:官方场景参考:两个 SpawnLocation 可以表示起点与检查点。先按本课步骤区分 Enabled 状态,避免随机出生。Roblox Creator Documentation · CC BY 4.0 · 原图未修改 · 许可说明

Learning route

先准备,再动手;看到结果后,记得保存。

每完成一小步,就测试一次。先说出你预计会看到什么,再用 Play 和 Output 检查,不用急着一次写完所有代码。

1

01 · 必须使用 SpawnLocation

普通 Part 可以作为视觉标记,却不能直接赋给 RespawnLocation。你需要两个真正的 SpawnLocation 对象。

2

02 · 把检查点记在玩家身上

player.RespawnLocation 保存的是一个出生点对象引用。它属于这个玩家,不属于所有玩家共享的 Workspace。

3

03 · 分清个人进度与共享外观

如果在服务器把检查点变绿,所有人都会看见绿色。这并不表示所有人都激活了它。判定个人进度时,要看对应 Player.RespawnLocation。

4

04 · 在两个出生点之间搭一小段路

现在再加入三个宽平台,把检查点放在完成第一段挑战之后。先确保单独重生功能可靠,再让关卡变难。

5

05 · 试一次“双人不同进度”

多人检查最能发现“把一个人的进度写成全局变量”的错误。A 激活检查点,B 仍在起点,两人的重生位置应不同。

Step by step

01 · 必须使用 SpawnLocation

普通 Part 可以作为视觉标记,却不能直接赋给 RespawnLocation。你需要两个真正的 SpawnLocation 对象。

为了避免首次出生随机选择检查点,将起点 Enabled=true、检查点 Enabled=false。玩家激活时再开启检查点,并且给每位新玩家明确指定 StartSpawn。

  1. 把已有 SpawnLocation 改名 StartSpawn,Position 设为 0, 0.5, 0。
  2. 插入第二个 SpawnLocation,命名 Checkpoint,Position 设为 0, 0.5, -30。
  3. 两者 Anchored=true、Neutral=true、AllowTeamChangeOnTouch=false;Checkpoint.CanTouch=true、Enabled=false。
  4. 在 ServerScriptService 创建 CheckpointManager。

Step by step

02 · 把检查点记在玩家身上

player.RespawnLocation 保存的是一个出生点对象引用。它属于这个玩家,不属于所有玩家共享的 Workspace。

脚本也会给新加入的玩家指定起点。因此即使别人已经开启 Checkpoint,后来进入的玩家仍从 StartSpawn 开始。

  1. 粘贴完整脚本。
  2. Play 后先别走到检查点,重置一次角色,确认还在起点。
  3. 再走到 Checkpoint,看 Output 是否显示激活消息。
ServerScriptService > CheckpointManager · 完整脚本Luau
local Players = game:GetService("Players")
local startSpawn = workspace:WaitForChild("StartSpawn")
local checkpoint = workspace:WaitForChild("Checkpoint")

local function setupPlayer(player)
    player.RespawnLocation = startSpawn
end
Players.PlayerAdded:Connect(setupPlayer)
for _, player in ipairs(Players:GetPlayers()) do setupPlayer(player) end

checkpoint.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
    if player.RespawnLocation == checkpoint then return end
    checkpoint.Enabled = true
    player.RespawnLocation = checkpoint
    print(player.Name, "Checkpoint activated")
end)
选中出生点时的 Studio 操作截图
图 11-2:官方出生点选择截图:确认选中的是 SpawnLocation 对象,再修改它的属性;不要只给普通 Part 改名字。Roblox Creator Documentation · CC BY 4.0 · 原图未修改 · 许可说明

Step by step

03 · 分清个人进度与共享外观

如果在服务器把检查点变绿,所有人都会看见绿色。这并不表示所有人都激活了它。判定个人进度时,要看对应 Player.RespawnLocation。

因此本课不把全场景变绿当作“我已保存”的证据。先读 Output 和玩家属性;等学会 LocalScript 后,就能制作只给自己看的提示。

  1. 运行时在服务器视角查看 Players 下自己的 RespawnLocation。
  2. 激活前它指向 StartSpawn,激活后指向 Checkpoint。
  3. 检查点不是立即传送按钮,赋值后只有下一次重生才用到它。

Step by step

04 · 在两个出生点之间搭一小段路

现在再加入三个宽平台,把检查点放在完成第一段挑战之后。先确保单独重生功能可靠,再让关卡变难。

出生点上方要有空间,不要贴着低屋顶或夹在墙里。角色出现时需要安全站立,不能刚出生又立刻掉下去。

  1. 起点到检查点之间加三个 Anchored 平台。
  2. 测试检查点周围至少能安全站立和转身。
  3. 本课保留 Baseplate,通过重置角色测试,不必先制造危险落差。

Step by step

05 · 试一次“双人不同进度”

多人检查最能发现“把一个人的进度写成全局变量”的错误。A 激活检查点,B 仍在起点,两人的重生位置应不同。

这只是本次会话的记录。Stop 后重新进入,新的 Player 仍从 StartSpawn 开始;这与第 10 课金币的生命周期相似。

  1. A 激活后重置,应出现在 Checkpoint。
  2. B 不激活直接重置,应出现在 StartSpawn。
  3. 停止测试再开始,确认起点规则恢复。

Homework

轮到你来改一改,做出自己的版本。

1 友好落脚点

给检查点增加一个宽平台和明显路标,保证出生后不被遮挡。

2 测试记录

分别记录激活前、激活后、重新 Play 的出生位置。

3 选做:第二检查点

复制一个新的 SpawnLocation,并为它添加独立触碰处理;先画清两个检查点的顺序。

完成标准:先在 Playtest 中验证作品,再点击 Stop,保存为“姓名缩写_Lesson11”或对应 Homework 副本;不要覆盖上一课的可运行版本。

Exit questions

先自己回答,再展开看看。

普通 Part 可以直接作为 RespawnLocation 吗?

不可以,需要 SpawnLocation。

赋值后会立刻把玩家移过去吗?

不会,它决定下一次重生的位置。

为什么给后来加入的玩家也设置起点?

避免其他已开启出生点让新玩家随机出生到中途。

所有人看到检查点绿色,就都保存了吗?

不一定,共享颜色与每位玩家的 RespawnLocation 是两种状态。

Explore further

需要查资料时,从这里出发。

正文代码可以直接复制。先确认脚本类型、放置位置,以及这段代码是完整版本还是小实验;不要把同一脚本的多个版本叠加运行。界面参考图已标注来源,图中的对象名可能与本课不同,请以操作步骤为准。