วัตถุอันตรายลดสุขภาพของผู้เล่นเมื่อพวกเขาแตะพวกเขา ในฐานะจุดเริ่มต้นที่ง่าย ส่วนนี้ของการกวดวิชาสอนคุณวิธีการสร้างส่วนใหญ่ที่มองไม่เห็นในระดับเดียวกับน้ําใน
สร้างภัยน้ำพื้นฐาน
เพื่อสร้างความเสี่ยงทางน้ำพื้นฐาน:
ใน หน้าต่าง Explorer เพิ่มโฟลเดอร์ใหม่ใน โลก โฟลเดอร์แล้วเปลี่ยนชื่อมันเป็น อันตราย แล้ว ตรวจสอบให้แน่ใจว่าชื่อถูกเขียนอย่างถูกต้องด้วยคำอธิบายที่เหมาะสม หา
ใน อันตราย โฟลเดอร์ใส่ส่วน บล็อก และเปลี่ยนชื่อมันเป็น อันตราย
ย้ายและปรับขนาดชิ้นส่วนเพื่อครอบคลุมเส้นสายน้ำรอบเกาะและแพลตฟอร์ม ตัวอย่าง การกระโดดเกาะ - สคริปต์ ช่วยให้ ขนาด เป
เลือกส่วน แล้วใน หน้าต่าง Proprieties กำหนดค่าต่อไปนี้เพื่อให้ความเสี่ยงให้มองไม่เห็นและผู้เล่นสามารถผ่านได้โดยตรงผ่านมัน:
- ตั้ง ความโปร่งใส เป็น 1 หนึ่งนี้ทำให้อันตรายมองไม่เห็นดังนั้นจึงทำให้น้ำจริงดูเหมือนอันตราย
- ปิดการใช้งาน CanCollide นี้จะบอกให้เครื่องยนต์ว่าชิ้นส่วนอื่นสามารถผ่านอันตรายได้โดยไม่มีอุปสรรค ซึ่งหมายความว่าผู้เล่นสามารถตกผ่านอันตรายได้
- เปิดใช้งาน ติดขัด นี้จะบอกให้เครื่องยนต์ไม่เคยเปลี่ยนตำแหน่งของอันตรายเนื่องจากการจำลองทางกายภาพใด ๆ ซึ่งหมายความว่าผู้เล่นสามารถสัมผัสอันตรายโดยไม่ส่งผลกระทบตำแหน่งของมัน
สร้าง สคริปต์ ใน ServerScriptService แล้วเปลี่ยนชื่อมันเป็น HazardService
แทนที่รหัสเริ่มต้นด้วยรหัสต่อไปนี้:
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คำอธิบายรหัสHazardService มีความคล้ายคลึงกับ CoinService อย่างมาก อย่างไรก็ตาม แทนที่จะเก็บเหรียญ ผู้เล่นมีสุขภาพ ตั้งค่าเป็น 0 เมื่อสัมผัสกับอันตราย
ระหว่างการโหลดหน้านี้ คุณสามารถแก้ไข เพิ่ม หรือลบวัตถุอันตรายในประสบการณ์ของคุณเพื่อสร้างอุปสรรคที่ไม่เหมือนใคร ตราบเท่าที่พวกเขาอยู่ใน อันตราย โฟลเดอร์พวกเขาทั้งหมดจะได
เชื่อมต่อกับชีวิตผู้เล่น
ช่วงชีวิตผู้เล่น เป็นตัวแทนเหตุการณ์ที่เกิดขึ้นเมื่อผู้เล่นใช้ประสบการณ์ของคุณเช่นการเข้าร่วมออกหรือ respawning คุณจำเป็นต้องเชื่อมตัวแทนเหตุการณ์เหล่านี้เพื่อดำเนิ
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)
รหัสจะกำหนดให้ฟังก์ชันเพื่อรีเซ็ตจำนวนเหรียญในช่วงเหตุการณ์ชีวิตของสมเหตุสมผล:
- Player.PlayerAdded จะปรากฏเมื่อผู้เล่นเข้าร่วมประสบการณ์ และตั้งค่าจำนวนเหรียญเป็น 0 * Player.CharacterAdded จะเกิดขึ้นเมื่อโมเดลตัวละครของผู้เล่นถูกเพิ่มเข้าสู่โลก มันจะเกิดขึ้นหลังจาก PlayerAdded และเมื่อผู้เล่นเกิดใหม่
- Humanoid.Died เปิดเมื่อผู้เล่นตาย และตั้งค่าจำนวนเหรียญเป็น 0 task.spawn() สร้างไดรับด้านธรรมาตรของผู้เล่นชีวิตจัดการนี้ด้วย, ดังนั้นส่วนอื่น ๆ ขอ
- Player.PlayerRemoved จะเริ่มต้นเมื่อผู้เล่นออกจากประสบการณ์เพื่อทำความสะอาดสถานะผู้เล่น
- รหัสนี้มีปัญหาที่อาจเกิดขึ้นที่ผู้เล่นสามารถเก็บเหรียญก่อนที่จะประกาศการโหวดเหรียญของผู้เล่นแล้วจากนั้นสร้างค่าเหรียญของผู้เล่นให้เป็นศูนย์ เพื่อ
ทดสอบ
ได้เวลาดูว่าผู้เล่นจะทำงานตามที่คาดหวังไว้หรือไม่ เมื่อคุณแตะน้ำจะตายและสูญเสียเหรียญของพวกเขา เพื่อทดสอบเกมของคุณ:
ในแถบเมนู คลิกปุ่ม เล่น ปุ่ม Studio จะเข้าสู่โหมดทดสอบการเล่น
ย้ายตัวละครของคุณเพื่อเก็บเหรียญบาง枚แล้วกระโดดลงในน้ำ หากสคริปของคุณทำงานอย่างถูกต้องแล้วตัวละครของคุณจะตาย และจำนวนเหรียญในกระดานผู้นําจะรีเซ็ตเป็น 0