危险对象会增加玩家触摸它们时的生命值。作为简单的起始点,这部分教程的教程向你教会如何在体验中创建一个大型隐形部分,以便落入危险可以让玩家的生命值变为零并重生,从而回到体验的开始。
创建一个基础水害
要创建基础水害危险:
在 Explorer 窗口中,将一个新文件夹添加到 世界 文件夹,然后重命名它为 危险 。确保名称正确地拼写为正确,否则代码将无法工作。
在 危险 文件夹中,插入一个 方块 部分并将其重命名为 危险 。
将零件移动和缩放以覆盖岛屿和平台周围的水线。例如,示例 岛屿跳跃 - 脚本 体验设置 大小 为 825, 1, 576 和 1> CFrame.Position1> 为 4> 174, -6.5, 384>。
选择零件,然后在 属性 窗口中,配置以下属性以隐藏危险,玩家可以通过它:
- 将透明度设置为1。这使危险隐形,因此实际水域显示为危险。
- 禁用 可以碰撞 . 这告诉引擎其他部分可以穿过危险,意味着玩家可以穿过危险。
- 启用 锚定 。这使引擎永远不会因任何物理相关模拟而改变危险的位置,从而保证玩家可以触摸危险而不会影响其位置。
在 ServerScriptService 中创建一个 脚本,然后将其重命名为 危险服务。
将以下代码替换为默认代验证码:
local Players = game:GetService("Players")local Workspace = game:GetService("Workspace")local hazardsFolder = Workspace.World.Hazardslocal hazards = hazardsFolder:GetChildren()local function onHazardTouched(otherPart)local character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player thenlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenhumanoid.Health = 0endendendfor _, hazard in hazards dohazard.Touched:Connect(onHazardTouched)end兑换码说明危险服务 有很多与 金币服务 的相似性。然而,而不是收集硬币,玩家的健康设置为 0 当他们触摸危险时。
随意修改、添加或移除危险对象在您的体验中创建独特的障碍。 只要它们包含在 危险 文件夹中,代码循环将事件处理器连接到您的所有危险。
连接到玩家生命周期
玩家生命周期代表玩家在您的体验中互动时发生的事件,例如加入、离开或重生。您需要将处理器连接到这些事件,以便为每个主要生命周期事件执行合适的逻辑。在 CoinService 脚本中,复制并粘贴以下代码在脚本底部:
local function onPlayerAdded(player)
-- 将玩家币重置为 0
updatePlayerCoins(player, function(_)
return 0
end)
player.CharacterAdded:Connect(function(character)
-- 等待孩子将停止玩家循环,因此以下应在单独的线程中进行
task.spawn(function()
-- 当玩家死亡时
character:WaitForChild("Humanoid").Died:Connect(function()
-- 将玩家币重置为 0
updatePlayerCoins(player, function(_)
return 0
end)
end)
end)
end)
end
-- 在连接到 PlayerAdded 事件之前初始化任何玩家
for _, player in Players:GetPlayers() do
onPlayerAdded(player)
end
local function onPlayerRemoved(player)
updatePlayerCoins(player, function(_)
return nil
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
Players.PlayerRemoving:Connect(onPlayerRemoved)
该代码定义了重置硬币计数器在适当的生命周期事件中的函数:
- Player.PlayerAdded 发生时玩家加入体验,并将硬币数量设置为 0 。
- Player.CharacterAdded 发生玩家角色模型添加到世界时。它发生在 PlayerAdded 和玩家重生时。
- Player.PlayerRemoved 触发时玩家离开体验以清理玩家状态。
- 此代码包含潜在问题,在玩家收集硬币之前,Players.PlayerAdded 事件执行,然后将其硬币数量重置为零。为了解决此问题,请考虑使用代码排程或冻结玩家角色直到初始化完成的解决方案。然而,这些解决方案涉及更复杂的脚本概念,这些概念超出本次教程的范围。
游戏测试
是时候看看玩家的危险是否如预期般工作。当你触摸水时,你的角色应该死亡并且失去硬币。要测试你的游戏:
在菜单栏中,单击 播放 按钮。Studio进入播放测试模式。
移动您的角色收集一些硬币,然后跳入水中。如果您的脚本正常运行,您的角色将死亡,并且排行榜上的硬币数量将重置为 0 。