現在,玩家可以隨意從任何平台掉落而不會有任何後果。本節將指導您創建一個在遊戲中與水面相同高度的大型無形危險物。當玩家掉入危險物時,健康值降為零並在遊戲開始時重生。
創建基本水危險
創建基本水危險在 Workspace > World 中,創建一個名為 Hazards 的新文件夾。在 Hazards 文件夾內,創建一個名為 Hazard 的塊部件,其大小為 825, 1, 576,CFrame.Position 為 174, -6.5, 38,以便該部件覆蓋島嶼和平台周圍的水面。將透明度設置為 1,以便該部件是透明的,實際水面出現為危險物,禁用 CanCollide,以便玩家可以掉落到水中,並啟用 Anchored,以防止物理移動它。
偵測玩家接觸危險物
危險物不會有任何作用,直到您編寫一個監聽 Touched 的腳本並將玩家的健康值降低至零。
創建 HazardService在 ServerScriptService 中,創建一個名為 HazardService 的腳本,並使用以下代碼:```lualocal 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```
代碼解釋
HazardService 與 CoinService 有許多相似之處。然而,當玩家接觸危險物時,他們的 健康值設置為 0,而不是收集硬幣。
隨意修改、添加或刪除您的遊戲中的危險物體,以創建獨特的障礙。只要它們包含在 Hazards 文件夾中,代碼循環便會將事件處理程序連接到您所有的危險物。
連接到玩家生命週期
玩家生命週期代表了玩家在遊戲中互動時發生的事件,例如加入、離開或重生。您需要將處理程序連接到這些事件,以便對每個主要生命週期事件執行邏輯。
將生命週期處理程序添加到 CoinService在 ServerScriptService 中,將以下代碼附加到現有 CoinService 腳本的底部(請勿替換任何現有代碼——請在其後添加此代碼):```lualocal function onPlayerAdded(player)-- 重置玩家的硬幣數量為 0updatePlayerCoins(player, function(_)return 0end)player.CharacterAdded:Connect(function(character)-- WaitForChild 將停止玩家循環,因此以下應在單獨的線程中完成task.spawn(function()-- 當玩家死亡時character:WaitForChild("Humanoid").Died:Connect(function()-- 重置玩家的硬幣數量為 0updatePlayerCoins(player, function(_)return 0end)end)end)end)end-- 初始化在連接到 PlayerAdded 事件之前添加的任何玩家for _, player in Players:GetPlayers() doonPlayerAdded(player)endlocal function onPlayerRemoved(player)updatePlayerCoins(player, function(_)return nilend)endPlayers.PlayerAdded:Connect(onPlayerAdded)Players.PlayerRemoving:Connect(onPlayerRemoved)```
代碼解釋
該代碼定義了在適當的生命週期事件期間重置硬幣數量的函數:
- Players.PlayerAdded 在玩家加入遊戲時觸發,並將硬幣數量設置為 0。
- Player.CharacterAdded 在玩家的角色模型被添加到世界中時觸發。在 PlayerAdded 之後,每當玩家重生時都會發生。
- Player.PlayerRemoved 在玩家離開遊戲時觸發,以清理玩家狀態。
- 此代碼包含一個潛在問題,即玩家在 Players.PlayerAdded 事件執行之前就可以收集硬幣,然後其硬幣數量會重置為零。為了減輕此問題,考慮一些解決方案,比如代碼調度或在初始化完成之前凍結玩家的角色。然而,這些解決方案涉及更複雜的腳本概念,超出本教程的範疇。
遊玩測試
從下拉菜單中選擇 Test,然後點擊 Play。收集一些硬幣,然後跳進水裡。您的角色應該死亡並在起始點重生,硬幣數量重置為 0。