สคริปต์ปุ่มอัปเกรด

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


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

สร้างปุ่มอัพเกรด

อินเทอร์เฟซ 2D ใน Roblox มักจะประกอบด้วยคอลเลกชันของส่วนประกอบ GUI ภายในคอนเทนเนอร์ GUIในกรณีนี้คุณต้องการเพียงส่วนประกอบ TextButton ที่ระบุว่า อัพเกรดการกระโดด (5 เหรียญ) ภายในคอนเทนเนอร์ ScreenGui

เพื่อสร้าง GUI:

  1. ในหน้าต่าง สํารวจ เพิ่มโฟลเดอร์ใหม่ใน ReplicatedStorage จากนั้นเปลี่ยนชื่อโฟลเดอร์เป็น ตัวอย่าง วัตถุใดๆ ใน ReplicatedStorage สามารถเข้าถึงไดรเวอร์ Roblox ของผู้เล่นแต่ละรายซึ่งเป็นที่ที่ GUIs จะแสดง
  2. เพิ่มวัตถุ ScreenGui ในโฟลเดอร์ Instances 3. เลือกวัตถุ ScreenGui จากนั้นในหน้าต่าง คุณสมบัติ 1. ตั้ง ชื่อ เป็น JumpPurchaseGui . 2. ปิดใช้งาน ResetOnSpawn เพื่อให้แน่ใจว่า GUI ยังคงเป็นของผู้เล่นเมื่อพวกเขาเกิดใหม่
  3. ในหน้าต่าง สํารวจ ใส่ ปุ่มข้อความ ในคอนเทนเนอร์ JumpPurchaseGui จากนั้นเปลี่ยนชื่อปุ่มข้อความเป็น JumpButton 5. (ตัวเลือก) ปรับแต่งรูปลักษณ์และตำแหน่งของปุ่มโดยการกำหนดค่าสมบัติของมัน คำแนะนำง่ายๆ รวมถึง:
    • ตั้งค่าคุณสมบัติ ข้อความ เป็น อัพเกรดการกระโดด (5 เหรียญ) * ตั้งค่าคุณสมบัติ TextSize เป็น 25
    • ตั้ง จุดยึด เป็น 1, 1 และ ตำแหน่ง เป็น {1, 0},{1, 0} เพื่อย้ายปุ่มไปที่มุมขวาล่าง

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

กำหนดข้อมูลพลังการกระโดด

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

เพื่ออัปเดตสคริปต์โมดูล PlayerData เพื่อเก็บพลังการกระโดด:

  1. ในหน้าต่าง สํารวจ เปิดสคริปต์โมดูล PlayerData ใน ServerStorage 2. แทนที่โค้ดในสคริปต์ด้วยตัวอย่างต่อไปนี้ซึ่งเริ่มต้นค่า Jump สำหรับผู้เล่นแต่ละคนพร้อมกับค่า Coins ที่มีอยู่:


    local PlayerData = {}
    PlayerData.COIN_KEY_NAME = "Coins"
    PlayerData.JUMP_KEY_NAME = "Jump"
    local playerData = {
    --[[
    [userId: string] = {
    ["Coins"] = coinAmount: number,
    ["Jump"] = jumpPower: number
    }
    --]]
    }
    local DEFAULT_PLAYER_DATA = {
    [PlayerData.COIN_KEY_NAME] = 0,
    [PlayerData.JUMP_KEY_NAME] = 0,
    }
    local function getData(player)
    local data = playerData[tostring(player.UserId)] or DEFAULT_PLAYER_DATA
    playerData[tostring(player.UserId)] = data
    return data
    end
    function PlayerData.getValue(player, key)
    return getData(player)[key]
    end
    function PlayerData.updateValue(player, key, updateFunction)
    local data = getData(player)
    local oldValue = data[key]
    local newValue = updateFunction(oldValue)
    data[key] = newValue
    return newValue
    end
    return PlayerData

อัปเดตข้อมูลแรงกระโดด

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

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

อัปเกรด:

  1. ในหน้าต่าง สํารวจ เปิดโฟลเดอร์ ตัวอย่าง ใน ReplicatedStorage

  2. ใส่ ฟังก์ชันระยะไกล ในโฟลเดอร์ ตัวอย่าง จากนั้นเปลี่ยนชื่อฟังก์ชันระยะไกลเป็น เพิ่มพลังการกระโดด คุณสร้างฟังก์ชันระยะไกลเสมอใน ReplicatedStorage เพราะทั้งไคลเอนต์และเซิร์ฟเวอร์ต้องสามารถเข้าถึงได้

    Studio's Explorer window with the IncreaseJumpPowerFunction script highlighted under the Instances folder.
  3. ในหน้าต่าง สํารวจ เลือก StarterPlayer

  4. ในหน้าต่าง คุณสมบัติ เปิดใช้งานคุณสมบัติ CharacterUseJumpPower โดยค่าพลังการกระโดดของตัวละครเริ่มต้นจะไม่กำหนดจำนวนที่ตัวละครกระโดดดังนั้นจำเป็นต้องเปิดใช้งาน

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

  6. รหัส:


    -- บริการ
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local ServerStorage = game:GetService("ServerStorage")
    local Players = game:GetService("Players")
    -- โมดูล
    local Leaderboard = require(ServerStorage.Leaderboard)
    local PlayerData = require(ServerStorage.PlayerData)
    -- อีเวนต์
    local IncreaseJumpPowerFunction = ReplicatedStorage.Instances.IncreaseJumpPowerFunction
    local JUMP_KEY_NAME = PlayerData.JUMP_KEY_NAME
    local COIN_KEY_NAME = PlayerData.COIN_KEY_NAME
    local JUMP_POWER_INCREMENT = 30
    local JUMP_COIN_COST = 5
    local function updateJumpPower(player, updateFunction)
    -- อัปเดตตารางพลังการกระโดด
    local newJumpPower = PlayerData.updateValue(player, JUMP_KEY_NAME, updateFunction)
    -- อัปเดตพลังการกระโดดของผู้เล่น
    local character = player.Character or player.CharacterAdded:Wait()
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    humanoid.JumpPower = newJumpPower
    -- ตารางอันดับ
    Leaderboard.setStat(player, JUMP_KEY_NAME, newJumpPower)
    end
    end
    local function onPurchaseJumpIncrease(player)
    local coinAmount = PlayerData.getValue(player, COIN_KEY_NAME)
    if coinAmount < JUMP_COIN_COST then
    return false
    end
    -- เพิ่มพลังการกระโดดของผู้เล่น
    updateJumpPower(player, function(oldJumpPower)
    oldJumpPower = oldJumpPower or 0
    return oldJumpPower + JUMP_POWER_INCREMENT
    end)
    -- อัปเดตโต๊ะเหรียญ
    local newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)
    return oldCoinAmount - JUMP_COIN_COST
    end)
    -- ตารางอันดับ
    Leaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)
    return true
    end
    local function onCharacterAdded(player)
    -- รีเซ็ตพลังการกระโดดของผู้เล่นเมื่อตัวละครถูกเพิ่ม
    updateJumpPower(player, function(_)
    return 0
    end)
    end
    -- เริ่มต้นผู้เล่นที่เพิ่มก่อนที่จะเชื่อมต่อกับอีเวนต์ PlayerAdded
    for _, player in Players:GetPlayers() do
    onCharacterAdded(player)
    end
    -- การเริ่มต้นปกติของผู้เล่นจากอีเวนต์ PlayerAdded
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(function()
    onCharacterAdded(player)
    end)
    end
    local function onPlayerRemoved(player)
    updateJumpPower(player, function(_)
    return nil
    end)
    end
    IncreaseJumpPowerFunction.OnServerInvoke = onPurchaseJumpIncrease
    Players.PlayerAdded:Connect(onPlayerAdded)
    Players.PlayerRemoving:Connect(onPlayerRemoved)

    ส่วนต่อไปอธิบายรหัสในรายละเอียดเพิ่มเติม

    • อัปเดตข้อมูลพลังการกระโดด - updateJumpPower() อัปเดตพลังการกระโดดของผู้เล่นและลีดเดอร์บอร์ดเพื่อให้ข้อเสนอแนะภาพการตอบสนองฟังก์ชันนี้คล้ายกับรหัสที่ทำให้เกิดอันตรายต่อผู้เล่นใน สร้างอันตรายผู้เล่นให้โมเดล Character และ Humanoid สำหรับผู้เล่นที่กําลังอัพเกรดอยู่, ฟังก์ชันอัปเดตคุณสมบัติ JumpPower เป็นค่าใหม่ที่เก็บไว้โดย PlayerData , เพิ่มขึ้น 30หากคุณต้องการให้เกมของคุณยาวนานขึ้นเล็กน้อย คุณสามารถลดตัวเลขนี้ได้

    • ตรวจสอบคำขอเซิร์ฟเวอร์ - onPurchaseJumpIncrease() ตรวจสอบครั้งแรกว่าผู้เล่นมีจํานวนเหรียญที่จําเป็นสําหรับการซื้ออัพเกรด คำขอทั้งหมด จากไคลเอนต์ไปยังเซิร์ฟเวอร์ควรเป็น ถูกตรวจสอบ เพื่อป้องกันไม่ให้ผู้กระทำผิดส่งคำขอปลอมและใช้ประโยชน์จากประสบการณ์ของคุณ

เพิ่มปุ่มใน GUI ของผู้เล่น

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

เพื่อเพิ่มปุ่มใน GUI ของผู้เล่นเมื่อพวกเขาเข้าร่วม:

  1. ในหน้าต่าง สํารวจ สร้าง สคริปต์ ใน ReplicatedStorage 2. เลือกสคริปต์จากนั้นในหน้าต่าง คุณสมบัติ 1. ตั้ง ชื่อ เป็น JumpButtonClickHandler . 2. ตั้ง RunContext เป็น ไคลเอนต์ . สิ่งนี้จะบอกให้เครื่องยนต์ทำงานเสมอในการดำเนินสคริปต์นี้บนไคลเอนต์เพื่อเพิ่มประสิทธิภาพการสื่อสารเครือข่าย

  2. ในสคริปต์เปิด แทนที่รหัสเริ่มต้นด้วยรหัสต่อไปนี้:


    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local playerGui = player.PlayerGui
    local IncreaseJumpPowerFunction = ReplicatedStorage.Instances.IncreaseJumpPowerFunction
    local jumpPurchaseGui = ReplicatedStorage.Instances.JumpPurchaseGui
    local jumpButton = jumpPurchaseGui.JumpButton
    local function onButtonClicked()
    local success, purchased = pcall(IncreaseJumpPowerFunction.InvokeServer, IncreaseJumpPowerFunction)
    if not success then
    -- ซื้อจะเป็นข้อความแจ้งข้อผิดพลาดหากความสําเร็จเป็นเท็จ
    error(purchased)
    elseif success and not purchased then
    warn("Not enough coins!")
    end
    end
    jumpButton.Activated:Connect(onButtonClicked)
    -- เพิ่ม JumpPurchaseGui ไปยัง Gui ของผู้เล่น
    jumpPurchaseGui.Parent = playerGui

    ส่วนต่อไปอธิบายรหัสในรายละเอียดเพิ่มเติม

    • รับการอ้างอิงถึงฟังก์ชัน GUI และเซิร์ฟเวอร์ - ตัวแปร IncreaseJumpPowerFunction , jumpPurchaseGui และ jumpButton มีการอ้างอิงถึงฟังก์ชันและ GUI ที่เรียกฟังก์ชันที่คุณต้องการในภายหลัง
    • กำหนดตัวจัดการเหตุการณ์ - onButtonClicked() กำหนดโลจิสติกสำหรับเมื่อผู้ใช้คลิกปุ่มอัพเกรดมันใช้ pcall() (การโทรป้องกัน) เพื่อเรียกใช้ RemoteFunctionการสื่อสารระหว่างไคลเอนต์และเซิร์ฟเวอร์ใดๆ เช่นนี้ต้องใช้ pcall() ในการจัดการข้อผิดพลาดหรือปัญหาการเชื่อมต่อ
    • เชื่อมต่อตัวจัดการกับปุ่ม - อีเวนต์ Activated สามารถใช้งานได้บนทุกแพลตฟอร์มรวมถึงเมาส์ หน้าจอสัมผัส หรือคอนเท็กซ์เกมแพดมันจะเริ่มตอนที่มีการคลิก , แตะ , หรือ เกมแพดปุ่ม ถูกปล่อยออกมา

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

ตอนนี้คุณควรจะสามารถซื้อการอัพเกรดการกระโดดสำหรับเหรียญโดยใช้ปุ่มอัพเกรดได้แล้ว เพื่อทดสอบโครงการ:

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

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

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