創建玩家危險物

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡


現在,玩家可以隨意從任何平台掉落而不會有任何後果。本節將指導您創建一個在遊戲中與水面相同高度的大型無形危險物。當玩家掉入危險物時,健康值降為零並在遊戲開始時重生。

創建基本水危險

創建基本水危險

在 Workspace > World 中,創建一個名為 Hazards 的新文件夾。
在 Hazards 文件夾內,創建一個名為 Hazard 的塊部件,其大小為 825, 1, 576,CFrame.Position 為 174, -6.5, 38,以便該部件覆蓋島嶼和平台周圍的水面。
將透明度設置為 1,以便該部件是透明的,實際水面出現為危險物,禁用 CanCollide,以便玩家可以掉落到水中,並啟用 Anchored,以防止物理移動它。

偵測玩家接觸危險物

危險物不會有任何作用,直到您編寫一個監聽 Touched 的腳本並將玩家的健康值降低至零。

創建 HazardService

在 ServerScriptService 中,創建一個名為 HazardService 的腳本,並使用以下代碼:
```lua
local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local hazardsFolder = Workspace.World.Hazards
local hazards = hazardsFolder:GetChildren()
local function onHazardTouched(otherPart)
local character = otherPart.Parent
local player = Players:GetPlayerFromCharacter(character)
if player then
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid then
humanoid.Health = 0
end
end
end
for _, hazard in hazards do
hazard.Touched:Connect(onHazardTouched)
end
```

HazardServiceCoinService 有許多相似之處。然而,當玩家接觸危險物時,他們的 健康值設置為 0,而不是收集硬幣。

隨意修改、添加或刪除您的遊戲中的危險物體,以創建獨特的障礙。只要它們包含在 Hazards 文件夾中,代碼循環便會將事件處理程序連接到您所有的危險物。

連接到玩家生命週期

玩家生命週期代表了玩家在遊戲中互動時發生的事件,例如加入、離開或重生。您需要將處理程序連接到這些事件,以便對每個主要生命週期事件執行邏輯。

將生命週期處理程序添加到 CoinService

在 ServerScriptService 中,將以下代碼附加到現有 CoinService 腳本的底部(請勿替換任何現有代碼——請在其後添加此代碼):
```lua
local function onPlayerAdded(player)
-- 重置玩家的硬幣數量為 0
updatePlayerCoins(player, function(_)
return 0
end)
player.CharacterAdded:Connect(function(character)
-- WaitForChild 將停止玩家循環,因此以下應在單獨的線程中完成
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)
```

該代碼定義了在適當的生命週期事件期間重置硬幣數量的函數:

  • Players.PlayerAdded 在玩家加入遊戲時觸發,並將硬幣數量設置為 0
  • Player.CharacterAdded 在玩家的角色模型被添加到世界中時觸發。在 PlayerAdded 之後,每當玩家重生時都會發生。
  • Humanoid.Died 在玩家死亡時觸發,並將硬幣數量設置為 0task.spawn() 為此創建一個單獨的線程,以便玩家生命週期的其他方面可以執行。
  • Player.PlayerRemoved 在玩家離開遊戲時觸發,以清理玩家狀態。
  • 此代碼包含一個潛在問題,即玩家在 Players.PlayerAdded 事件執行之前就可以收集硬幣,然後其硬幣數量會重置為零。為了減輕此問題,考慮一些解決方案,比如代碼調度或在初始化完成之前凍結玩家的角色。然而,這些解決方案涉及更複雜的腳本概念,超出本教程的範疇。

遊玩測試

從下拉菜單中選擇 Test,然後點擊 Play。收集一些硬幣,然後跳進水裡。您的角色應該死亡並在起始點重生,硬幣數量重置為 0

©2026 Roblox Corporation、Roblox、Roblox 標誌及 Powering Imagination 是我們在美國及其他國家地區的部分註冊與未註冊商標。