วัตถุอันตรายลดสุขภาพของผู้เล่นเมื่อสัมผัสกับพวกเขาในฐานะจุดเริ่มต้นที่เรียบง่าย ส่วนนี้ของบทแนะนำการใช้งานสอนวิธีการสร้างส่วนที่มองไม่เห็นขนาดใหญ่ในระดับเดียวกับน้ําในประสบการณ์ของคุณ เพื่อให้การล้มลงในอันตรายเปลี่ยนสุขภาพของผู้เล่นเป็นศูนย์และรีสปอว์นพวกเขากลับไปที่จุดเริ่มต้นของประสบการณ์
สร้างอันตรายจากน้ำพื้นฐาน
เพื่อสร้างอันตรายจากน้ำพื้นฐาน:
ในหน้าต่าง สํารวจ เพิ่มโฟลเดอร์ใหม่ในโฟลเดอร์ โลก จากนั้นเปลี่ยนชื่อใหม่เป็น อันตราย ตรวจสอบให้แน่ใจว่าชื่อสะกดถูกต้องด้วยเคสที่ถูกต้องไม่อย่างนั้นโค้ดจะไม่ทำงาน
ในโฟลเดอร์ อันตราย ใส่ส่วน บล็อก และเปลี่ยนชื่อเป็น อันตราย
ย้ายและขยายชิ้นส่วนเพื่อครอบคลุมสายน้ำรอบเกาะและแพลตฟอร์มตัวอย่างเช่นชุดประสบการณ์การกระโดดเกาะตัวอย่าง Island Jump - Scripting ตั้ง ขนาด เป็น และ CFrame.Position เป็น
เลือกส่วนจากนั้นในหน้าต่าง คุณสมบัติ ให้กำหนดค่าคุณสมบัติต่อไปนี้เพื่อให้อันตรายมองไม่เห็นและผู้เล่นสามารถผ่านไปได้:
- ตั้ง ความโปร่งใส เป็น 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คําอธิบายโค้ดบริการอันตราย มีความคล้ายคลึงกับบริการเหรียญ มากอย่างไรก็ตาม แทนที่จะเก็บเหรียญ ผู้เล่นมีสุขภาพตั้งค่าเป็น 0 เมื่อพวกเขาสัมผัสกับอันตราย รู้สึกอิสระที่จะปรับแต่ง เพิ่ม หรือลบวัตถุอันตรายในประสบการณ์ของคุณเพื่อสร้างอุปสรรคที่ไม่ซ้ำกันตราบใดที่พวกเขาอยู่ในโฟลเดอร์ อันตราย รหัสลูปจะเชื่อมต่อตัวจัดการเหตุการณ์กับอันตรายทั้งหมดของคุณ
เชื่อมต่อกับวงจรชีวิตของผู้เล่น
วงจรชีวิตของผู้เล่นแทนที่เหตุการณ์ที่เกิดขึ้นเมื่อผู้เล่นโต้ตอบกับประสบการณ์ของคุณ เช่น เข้าร่วม ออก หรือเกิดใหม่คุณต้องเชื่อมต่อตัวจัดการกับเหตุการณ์เหล่านี้เพื่อดำเนินการตามโลจิสติกอย่างเหมาะสมสำหรับแต่ละเหตุการณ์หลักของวงจรชีวิตในสคริปต์ CoinService คัดลอกและวางโค้ดต่อไปนี้ที่ด้านล่างของสคริปต์:
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``Library.task.spawn() สร้างกระทู้แยกสำหรับจัดการสิ่งนี้เพื่อให้สามารถดำเนินการด้านอื่นๆ ของวงจรชีวิตผู้เล่นได้
- Player.PlayerRemoved ไฟเมื่อผู้เล่นออกจากประสบการณ์เพื่อล้างสถานะผู้เล่น
- รหัสนี้มีปัญหาที่อาจเกิดขึ้นซึ่งผู้เล่นสามารถรวบรวมเหรียญก่อนที่จะดำเนินการเหตุการณ์ Players.PlayerAdded และจากนั้นจะรีเซ็ตการนับเหรียญของพวกเขาเป็นศูนย์เพื่อลดปัญหานี้ พิจารณาทางออกเช่นการกำหนดการเวลาการรันโค้ดหรือแช่แข็งตัวละครของผู้เล่นจนกว่าจะเสร็จสิ้นการเริ่มต้นอย่างไรก็ตาม โซลูชันเหล่านี้มีแนวคิดการเขียนสคริปที่ซับซ้อนมากขึ้นที่อยู่นอกเหนือขอบเขตของบทแนะนำนี้
ทดสอบการเล่น
ถึงเวลาที่จะดูว่าอันตรายของผู้เล่นทำงานตามที่ตั้งใจไว้ เมื่อคุณสัมผัสกับน้ํา ตัวละครของคุณควรตายและสูญเสียเหรียญของพวกเขา เพื่อทดสอบเกมของคุณ:
ในแถบเครื่องมือ คลิกปุ่ม เล่น คุณจะเข้าสู่โหมดการทดสอบเล่น Studio
ย้ายตัวละครของคุณเพื่อเก็บเหรียญบางส่วนแล้วกระโดดลงในน้ำหากสคริปต์ทำงานอย่างถูกต้องตัวละครของคุณจะตายและจํานวนเหรียญในลีดเดอร์บอร์ดจะรีเซ็ตเป็น 0