สร้างอันตรายของผู้เล่น

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่


วัตถุอันตรายลดสุขภาพของผู้เล่นเมื่อสัมผัสกับพวกเขาในฐานะจุดเริ่มต้นที่เรียบง่าย ส่วนนี้ของบทแนะนำการใช้งานสอนวิธีการสร้างส่วนที่มองไม่เห็นขนาดใหญ่ในระดับเดียวกับน้ําในประสบการณ์ของคุณ เพื่อให้การล้มลงในอันตรายเปลี่ยนสุขภาพของผู้เล่นเป็นศูนย์และรีสปอว์นพวกเขากลับไปที่จุดเริ่มต้นของประสบการณ์

สร้างอันตรายจากน้ำพื้นฐาน

เพื่อสร้างอันตรายจากน้ำพื้นฐาน:

  1. ในหน้าต่าง สํารวจ เพิ่มโฟลเดอร์ใหม่ในโฟลเดอร์ โลก จากนั้นเปลี่ยนชื่อใหม่เป็น อันตราย ตรวจสอบให้แน่ใจว่าชื่อสะกดถูกต้องด้วยเคสที่ถูกต้องไม่อย่างนั้นโค้ดจะไม่ทำงาน

  2. ในโฟลเดอร์ อันตราย ใส่ส่วน บล็อก และเปลี่ยนชื่อเป็น อันตราย

    Studio's Explorer window with the Hazard block Part highlighted under the Hazards folder.
  3. ย้ายและขยายชิ้นส่วนเพื่อครอบคลุมสายน้ำรอบเกาะและแพลตฟอร์มตัวอย่างเช่นชุดประสบการณ์การกระโดดเกาะตัวอย่าง Island Jump - Scripting ตั้ง ขนาด เป็น และ CFrame.Position เป็น

    A far out view of all of the cylinder sea stacks and the island. A large block part covers the water where a player could land if they fell from a sea stack.
  4. เลือกส่วนจากนั้นในหน้าต่าง คุณสมบัติ ให้กำหนดค่าคุณสมบัติต่อไปนี้เพื่อให้อันตรายมองไม่เห็นและผู้เล่นสามารถผ่านไปได้:

    • ตั้ง ความโปร่งใส เป็น 1 . ซึ่งทำให้อันตรายมองไม่เห็น ดังนั้นน้ำจริงจึงดูเหมือนเป็นอันตราย
    • ปิดใช้งาน CanCollide สิ่งนี้บอกเครื่องยนต์ว่าส่วนอื่นๆ สามารถผ่านอันตรายได้อย่างต่อเนื่อง ซึ่งหมายความว่าผู้เล่นสามารถตกผ่านอันตรายได้
    • เปิดใช้งาน พิน .สิ่งนี้บอกให้เครื่องยนต์ไม่เปลี่ยนตำแหน่งของอันตรายเนื่องจากการจำลองทางฟิสิกส์ใดๆ ซึ่งหมายความว่าผู้เล่นสามารถสัมผัสอันตรายได้โดยไม่ส่งผลต่อตำแหน่งของมัน
  5. สร้าง สคริปต์ ใน ServerScriptService จากนั้นเปลี่ยนชื่อเป็น HazardService

  6. รหัส:


    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

    บริการอันตราย มีความคล้ายคลึงกับบริการเหรียญ มากอย่างไรก็ตาม แทนที่จะเก็บเหรียญ ผู้เล่นมีสุขภาพตั้งค่าเป็น 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 และจากนั้นจะรีเซ็ตการนับเหรียญของพวกเขาเป็นศูนย์เพื่อลดปัญหานี้ พิจารณาทางออกเช่นการกำหนดการเวลาการรันโค้ดหรือแช่แข็งตัวละครของผู้เล่นจนกว่าจะเสร็จสิ้นการเริ่มต้นอย่างไรก็ตาม โซลูชันเหล่านี้มีแนวคิดการเขียนสคริปที่ซับซ้อนมากขึ้นที่อยู่นอกเหนือขอบเขตของบทแนะนำนี้

ทดสอบการเล่น

ถึงเวลาที่จะดูว่าอันตรายของผู้เล่นทำงานตามที่ตั้งใจไว้ เมื่อคุณสัมผัสกับน้ํา ตัวละครของคุณควรตายและสูญเสียเหรียญของพวกเขา เพื่อทดสอบเกมของคุณ:

  1. ในแถบเครื่องมือ คลิกปุ่ม เล่น คุณจะเข้าสู่โหมดการทดสอบเล่น Studio

    Play button highlighted in Studio's playtesting options.
  2. ย้ายตัวละครของคุณเพื่อเก็บเหรียญบางส่วนแล้วกระโดดลงในน้ำหากสคริปต์ทำงานอย่างถูกต้องตัวละครของคุณจะตายและจํานวนเหรียญในลีดเดอร์บอร์ดจะรีเซ็ตเป็น 0