การสร้างการเก็บข้อมูลสุขภาพ

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

ในระหว่างการฝึกสคริปต์พื้นฐาน คุณจะมีสคริปต์แต่ละชิ้นเพื่อสร้างฉากที่เล่นได้ ด้วยวิธีการเก่า หากคุณเคยคัดลอกสคริปต์ คุณจะมีสคริปต์ซ้ำซากด้วย นี่จะทำให้การปรับปรุงสคริปต์น่

ในวิดีโอนี้จะใช้รูปแบบที่แตกต่างกันเพื่อสร้างจำนวนหลายของการเก็บสุขภาพโดยใช้เฉพาะคัดลอกเดียวของสคริปต์ซึ่งกำหนดการเก็บสุขภาพโดยใช้ เมื่อสัมผัสจะฟื้นฟูสุขภาพของผู้เล่นแล

การตั้งค่า

ก่อนอื่น, คุณจะต้องมีส่วนหนึ่งหรือรุ่นที่จะใช้เป็นจุดเก็บของ โลก ตัวอย่างเมืองในเกม รวมอยู่ด้วยจำนวนมากของการเก็บของสุขภาพทั่วแผนที่

Edit in Studio option from the experience's main page

แต่ละการเก็บสุขภาพเป็นการผสานรวมของสองส่วนสี่เหลี่ยมผืนที่มีสีเขียว PointLight ภายใน พวกเขาจัดเก็บไว้ในโฟลเดอร์เดียวใน Workspace ที่เรียกว่า HealthPickups ซึ่งเป็นสถานที่ที่ส

การฟื้นฟูสุขภาพ

เพื่อเริ่มต้น สคริปต์จะต้องสร้างความสมบูรณ์แบบให้กับสุขภาพของผู้เล่น รูปแบบนี้คุณควรคุ้นเคยจากการฝึกเริ่มต้น ลาวาเสียชีวิต นี้

  1. ใน ServerScriptService เพิ่มสคริปต์ที่มีชื่อว่า PickupManager

  2. ในสคริปต์นี้ ประกาศคงคลังที่มีชื่อว่า MAX_HEALTH ด้วยค่า 100

  3. สร้างฟังก์ชันที่มีชื่อว่า onTouchHealthPickup ด้วยพารามิเตอร์สำหรับอีกส่วนที่แตะเก็บและตัวเก็บ


    local MAX_HEALTH = 100
    local function onTouchHealthPickup(otherPart, healthPickup)
    end
  4. ในคุณสมบัติ, รับตัวอักษร รุ่นจากพ่อของ otherPart ต่อไป, ตรวจสอบว่ามี Humanoid โดยใช้ FindFirstChildWhichIsA() .

  5. หากมี humanoid ให้ตั้งค่า ความเป็นสุข ของพวกเขาให้เป็น MAX_HEALTH


    local MAX_HEALTH = 100
    local function onTouchHealthPickup(otherPart, healthPickup)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    humanoid.Health = MAX_HEALTH
    end
    end

การเก็บไอเท็มจากโฟลเดอร์

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

เมื่อเรียกในโฟลเดอร์ ฟังก์ชัน GetChildren จะกลับค่าตัวแบบจานสมุดของโฟลเดอร์

  1. ภายใต้ MAX_HEALTH ประกาศตัวแปรที่ชื่อ healthPickupsFolder และใช้ฟังก์ชัน WaitForChild เพื่อดึงหน่อไม้สุขภาพจาก Workspace

  2. สร้างแปรที่มีชื่อว่า healthPickups เพื่อเก็บผลลัพธ์จากการโทรคุณสมบัติ GetChildren บน healthPickupsFolder


    local MAX_HEALTH = 100
    local healthPickupsFolder = workspace:WaitForChild("HealthPickups")
    local healthPickups = healthPickupsFolder:GetChildren()
    local function onTouchHealthPickup(otherPart, healthPickup)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    humanoid.Health = MAX_HEALTH
    end
    end

การเรียกแทรกกับ ipairs

onTouchHealthPickup ต้องการที่จะโทรทุกครั้งเพื่อรับการเพิ่มสุขภาพในแต่ละครั้งในรายการ เพื่อทำเช่นนี้อย่างมีประสิทธิภาพ รูปแบบของลูปใหม่จะถูกใช้

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

  • ดัชนี : นี่คือตัวแปรควบคุมในปกติสำหรับขีดเส้นใต้
  • มูลค่า : นี้จะถูกกรอกด้วยแต่ละองค์ประกอบในรายการเป็นลำดับของลำดับการทำซ้ำ เป็นความคิดที่ดีที่จะตั้งชื่อแปรมูลค่าหลังจากที่มันจะมีอยู่จริง
  • รายการ : รายการที่คุณต้องการเรียกผ่านไปยัง iпаร์ทีฟังก์ชัน

ในรหัสต่อไปนี้คุณไม่ต้องการดัชนีสำหรับอะไรใด ๆ ดังนั้นจึงสามารถว่างเปล่าด้วย _ สร้างรายการ สำหรับ ห่วงโซ่โดยใช้ฟังก์ชัน ipairs ผ่าน 1> health


local function onTouchHealthPickup(otherPart, healthPickup)
local character = otherPart.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid then
humanoid.Health = MAX_HEALTH
end
end
for _, healthPickup in ipairs(healthPickups) do
end

จะต้องมีคุณสมบัติในการใช้งานตัวอุปกรณ์หุ้มเมื่อเชื่อมต่อกับเหตุการณ์ onTouchHealthPickup

  1. ใน for ห้องนิรภัย เชื่อมต่อเหตุการณ์ที่แตะไปยังฟังก์ชันที่ไม่ระบุด้วยตัวอักษรที่มีชื่อว่า otherPart

  2. โทรหาฟังก์ชัน onTouchHealthPickups โดยมีทั้งสมมติมาตรฐาน otherPart และ healthPickup


    for _, healthPickup in ipairs(healthPickups) do
    healthPickup.Touched:Connect(function(otherPart)
    onTouchHealthPickup(otherPart, healthPickup)
    end)
    end

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

จะปรากฏบาร์สุขภาพที่ด้านบนขวาซึ่งจะหายไปเมื่อผู้เล่นได้รับการรักษา

เวลาการเก็บตัวเงิน

ขณะนี้การเลือกจะรักษาผู้เล่นที่แตะมันได้อย่างถาวร มันจะมีประสิทธิภาพมากขึ้นในเกมถ้ามันสามารถเลือกได้เเค่ครั้งเดียวก่อนที่จะสามารถใช้งานได้อีกครั้ง

ก่อนอื่น, คุณต้องบันทึกว่าเก็บของอยู่ในระยะเวลาที่ใช้เวลานานหรือไม่ รูปแบบด้านล่างควรเป็นที่คุ้นเคยจาก Fading Trap - ในครั้งนี้, การดีบั๊นจะถูกบังคับโดยการตั้งค่าคุณสมบัติใน

  1. ใน for เวลาผ่าน กำหนดค่าตัวละครใหม่ที่มีชื่อว่า Enabled Bernie ไปยัง true

  2. หุ้มโค้ดภายใน onTouchHealthPickup ด้วย if สถานะที่มีเงื่อนไข healthPickup:GetAttribute("Enabled") ใน


    local function onTouchHealthPickup(otherPart, healthPickup)
    if healthPickup:GetAttribute("Enabled") then
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    humanoid.Health = MAX_HEALTH
    end
    end
    end
    for _, healthPickup in ipairs(healthPickups) do
    healthPickup:SetAttribute("Enabled", true)
    healthPickup.Touched:Connect(function(otherPart)
    onTouchHealthPickup(otherPart, healthPickup)
    end)
    end

การปิดการเก็บขึ้น

การเลือกจะต้องให้ข้อมูลทางสายตาว่ามันถูกปิด - วิธีที่พบบ่อยในการระบุสิ่งนี้คือทำให้มันเป็นของโปร่งใส

  1. ประกาศสามค่าคงที่ในด้านบนของสคริปต์ (ระหว่างการปรับแต่งแต่ละค่าตามความชอบของคุณ):

    • ENABLED_TRANSPARENCY = 0.4
    • DISABLED_TRANSPARENCY = 0.9
    • COOLDOWN = 10

    local MAX_HEALTH = 100
    local ENABLED_TRANSPARENCY = 0.4
    local DISABLED_TRANSPARENCY = 0.9
    local COOLDOWN = 10
    local healthPickupsFolder = workspace:WaitForChild("HealthPickups")
  2. ใน if สถานะใน onTouchHealthPickup ตั้งค่า Transparency ของการเก็บขึ้นไปยัง DISABLED_TRANSPARENCY และมูลค่าของค่าตัวละคร 1> Enabled1> เป็น false


    local function onTouchHealthPickup(otherPart, healthPickup)
    if healthPickup:GetAttribute("Enabled") then
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    humanoid.Health = MAX_HEALTH
    healthPickup.Transparency = DISABLED_TRANSPARENCY
    healthPickup:SetAttribute("Enabled", false)
    end
    end
    end
  3. เรียกคุณสมบัติ task.wait() โดยผ่าน COOLDOWN เป็นจำนวนเงินที่จะรอ

  4. ตั้งค่า Transparency กลับไปที่ ENABLED_TRANSPARENCY และ Enabled กลับไปที่ 1> true1>


    local function onTouchHealthPickup(otherPart, healthPickup)
    if healthPickup:GetAttribute("Enabled") then
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    humanoid.Health = MAX_HEALTH
    healthPickup.Transparency = DISABLED_TRANSPARENCY
    healthPickup:SetAttribute("Enabled", false)
    task.wait(COOLDOWN)
    healthPickup.Transparency = ENABLED_TRANSPARENCY
    healthPickup:SetAttribute("Enabled", true)
    end
    end
    end

ทดสอบการเก็บของคุณอีกครั้ง: คุณควรพบว่าเมื่อคุณแตะการเก็บของ มันจะคืนค่าสุขภาพของคุณ เป็นใส่ใจ แล้วกลับมาใช้อีกครั้ง

หากคุณต้องการทำให้ข้อเสนอแนะมีผลกระทบมากขึ้นสำหรับผู้เล่นเมื่อเก็บขึ้น ลองตัดความสว่างของ PointLight ในการเก็บขึ้นเมื่อคุณเปลี่ยนความโปร่งใส

ลองใช้การเพิ่มสุขภาพเหล่านี้ในโครงการของคุณเอง หรือเปลี่ยนรูปลักษณ์และผลลัพธ์เพื่อให้ประเภทของการเพิ่มสุขภาพที่แตกต่างกันให้กับผู้เล่นของคุณ

รหัสสุดท้าย


local MAX_HEALTH = 100
local ENABLED_TRANSPARENCY = 0.4
local DISABLED_TRANSPARENCY = 0.9
local COOLDOWN = 10
local healthPickupsFolder = workspace:WaitForChild("HealthPickups")
local healthPickups = healthPickupsFolder:GetChildren()
local function onTouchHealthPickup(otherPart, healthPickup)
if healthPickup:GetAttribute("Enabled") then
local character = otherPart.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid then
humanoid.Health = MAX_HEALTH
healthPickup.Transparency = DISABLED_TRANSPARENCY
healthPickup:SetAttribute("Enabled", false)
task.wait(COOLDOWN)
healthPickup.Transparency = ENABLED_TRANSPARENCY
healthPickup:SetAttribute("Enabled", true)
end
end
end
for _, healthPickup in ipairs(healthPickups) do
healthPickup:SetAttribute("Enabled", true)
healthPickup.Touched:Connect(function(otherPart)
onTouchHealthPickup(otherPart, healthPickup)
end)
end