ผู้เล่นสามารถรวบรวมเหรียญและสูญเสียพวกเขาเมื่อตาย แต่เหรียญไม่ทำอะไร และส่วนใหญ่ของโลกเกมไม่สามารถเข้าถึงได้โดยไม่มีความสามารถในการกระโดดสูงส่วนนี้ของบทแนะนำการใช้งานสอนวิธีการเสร็จสิ้นโลจิสติกสำหรับประสบการณ์ของคุณโดยการเพิ่มปุ่มบนหน้าจอที่ใช้เหรียญเพื่อเพิ่มพลังการกระโดด
สร้างปุ่มอัพเกรด
อินเทอร์เฟซ 2D ใน Roblox มักจะประกอบด้วยคอลเลกชันของส่วนประกอบ GUI ภายในคอนเทนเนอร์ GUIในกรณีนี้คุณต้องการเพียงส่วนประกอบ TextButton ที่ระบุว่า อัพเกรดการกระโดด (5 เหรียญ) ภายในคอนเทนเนอร์ ScreenGui
เพื่อสร้าง GUI:
- ในหน้าต่าง สํารวจ เพิ่มโฟลเดอร์ใหม่ใน ReplicatedStorage จากนั้นเปลี่ยนชื่อโฟลเดอร์เป็น ตัวอย่าง วัตถุใดๆ ใน ReplicatedStorage สามารถเข้าถึงไดรเวอร์ Roblox ของผู้เล่นแต่ละรายซึ่งเป็นที่ที่ GUIs จะแสดง
- เพิ่มวัตถุ ScreenGui ในโฟลเดอร์ Instances 3. เลือกวัตถุ ScreenGui จากนั้นในหน้าต่าง คุณสมบัติ 1. ตั้ง ชื่อ เป็น JumpPurchaseGui . 2. ปิดใช้งาน ResetOnSpawn เพื่อให้แน่ใจว่า GUI ยังคงเป็นของผู้เล่นเมื่อพวกเขาเกิดใหม่
- ในหน้าต่าง สํารวจ ใส่ ปุ่มข้อความ ในคอนเทนเนอร์ JumpPurchaseGui จากนั้นเปลี่ยนชื่อปุ่มข้อความเป็น JumpButton 5. (ตัวเลือก) ปรับแต่งรูปลักษณ์และตำแหน่งของปุ่มโดยการกำหนดค่าสมบัติของมัน คำแนะนำง่ายๆ รวมถึง:
- ตั้งค่าคุณสมบัติ ข้อความ เป็น อัพเกรดการกระโดด (5 เหรียญ) * ตั้งค่าคุณสมบัติ TextSize เป็น 25
- ตั้ง จุดยึด เป็น 1, 1 และ ตำแหน่ง เป็น {1, 0},{1, 0} เพื่อย้ายปุ่มไปที่มุมขวาล่าง
คุณจะเพิ่มปุ่มใน GUI ของผู้เล่นในภายหลังในบทแนะนำนี้ แต่ก่อนที่คุณจะทำ คุณต้องกำหนดทั้งหมดของโลจิสติกและข้อมูลที่จำเป็นสำหรับให้ปุ่มทำงาน
กำหนดข้อมูลพลังการกระโดด
ขณะนี้เฉพาะจํานวนเหรียญเท่านั้นที่จะถูกจัดเก็บสําหรับผู้เล่นแต่ละคนในสคริปต์โมดูล PlayerData คุณต้องจัดเก็บและอัปเดตพลังการกระโดดในลักษณะเดียวกันเนื่องจากฟังก์ชันใน PlayerData ไม่เฉพาะเจาะจงสำหรับข้อมูลที่กำลังเปลี่ยนแปลงทั้งหมดที่จำเป็นในการจัดเก็บพลังการกระโดดของผู้เล่นคือการเพิ่มกุญแจ Jump และกำหนดค่าค่าเริ่มต้นใน DEFAULT_PLAYER_DATA
เพื่ออัปเดตสคริปต์โมดูล PlayerData เพื่อเก็บพลังการกระโดด:
ในหน้าต่าง สํารวจ เปิดสคริปต์โมดูล 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_DATAplayerData[tostring(player.UserId)] = datareturn dataendfunction PlayerData.getValue(player, key)return getData(player)[key]endfunction PlayerData.updateValue(player, key, updateFunction)local data = getData(player)local oldValue = data[key]local newValue = updateFunction(oldValue)data[key] = newValuereturn newValueendreturn PlayerData
อัปเดตข้อมูลแรงกระโดด
ตอนนี้ PlayerData สามารถติดตามพลังการกระโดดได้แล้ว คุณต้องใช้โลจิสติกบนเซิร์ฟเวอร์เพื่ออัปเกรดพลังการกระโดดจากคำขอไคลเอนต์ของผู้เล่น
เซิร์ฟเวอร์และไคลเอนต์สามารถสื่อสารผ่านทาง อีเวนต์ระยะไกล หรือ ฟังก์ชันระยะไกลอีเวนต์ระยะไกลไม่เกิดขึ้นเมื่อถูกยิงและเหมาะสำหรับการสื่อสารแบบเดียวทางฟังก์ชันระยะไกลให้ผลจนกว่าพวกเขาจะได้รับคำตอบซึ่งช่วยให้สามารถสื่อสารไป-มาได้ในกรณีนี้ลูกค้าต้องรู้ว่าเซิร์ฟเวอร์อัพเกรดพลังการกระโดดของผู้เล่นสําเร็จหรือไม่ดังนั้นฟังก์ชันระยะไกลจึงเป็นตัวเลือกที่เหมาะสม
อัปเกรด:
ในหน้าต่าง สํารวจ เปิดโฟลเดอร์ ตัวอย่าง ใน ReplicatedStorage
ใส่ ฟังก์ชันระยะไกล ในโฟลเดอร์ ตัวอย่าง จากนั้นเปลี่ยนชื่อฟังก์ชันระยะไกลเป็น เพิ่มพลังการกระโดด คุณสร้างฟังก์ชันระยะไกลเสมอใน ReplicatedStorage เพราะทั้งไคลเอนต์และเซิร์ฟเวอร์ต้องสามารถเข้าถึงได้
ในหน้าต่าง สํารวจ เลือก StarterPlayer
ในหน้าต่าง คุณสมบัติ เปิดใช้งานคุณสมบัติ CharacterUseJumpPower โดยค่าพลังการกระโดดของตัวละครเริ่มต้นจะไม่กำหนดจำนวนที่ตัวละครกระโดดดังนั้นจำเป็นต้องเปิดใช้งาน
ในหน้าต่าง สํารวจ ใส่สคริปต์ใหม่ลงใน ServerScriptService แล้วเปลี่ยนชื่อสคริปต์เป็น JumpService สคริปต์นี้จะมีโลจิกสำหรับการอัพเกรดการกระโดด
รหัส:
-- บริการ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.IncreaseJumpPowerFunctionlocal JUMP_KEY_NAME = PlayerData.JUMP_KEY_NAMElocal COIN_KEY_NAME = PlayerData.COIN_KEY_NAMElocal JUMP_POWER_INCREMENT = 30local JUMP_COIN_COST = 5local 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 thenhumanoid.JumpPower = newJumpPower-- ตารางอันดับLeaderboard.setStat(player, JUMP_KEY_NAME, newJumpPower)endendlocal function onPurchaseJumpIncrease(player)local coinAmount = PlayerData.getValue(player, COIN_KEY_NAME)if coinAmount < JUMP_COIN_COST thenreturn falseend-- เพิ่มพลังการกระโดดของผู้เล่นupdateJumpPower(player, function(oldJumpPower)oldJumpPower = oldJumpPower or 0return oldJumpPower + JUMP_POWER_INCREMENTend)-- อัปเดตโต๊ะเหรียญlocal newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)return oldCoinAmount - JUMP_COIN_COSTend)-- ตารางอันดับLeaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)return trueendlocal function onCharacterAdded(player)-- รีเซ็ตพลังการกระโดดของผู้เล่นเมื่อตัวละครถูกเพิ่มupdateJumpPower(player, function(_)return 0end)end-- เริ่มต้นผู้เล่นที่เพิ่มก่อนที่จะเชื่อมต่อกับอีเวนต์ PlayerAddedfor _, player in Players:GetPlayers() doonCharacterAdded(player)end-- การเริ่มต้นปกติของผู้เล่นจากอีเวนต์ PlayerAddedlocal function onPlayerAdded(player)player.CharacterAdded:Connect(function()onCharacterAdded(player)end)endlocal function onPlayerRemoved(player)updateJumpPower(player, function(_)return nilend)endIncreaseJumpPowerFunction.OnServerInvoke = onPurchaseJumpIncreasePlayers.PlayerAdded:Connect(onPlayerAdded)Players.PlayerRemoving:Connect(onPlayerRemoved)คําอธิบายโค้ดส่วนต่อไปอธิบายรหัสในรายละเอียดเพิ่มเติม
อัปเดตข้อมูลพลังการกระโดด - updateJumpPower() อัปเดตพลังการกระโดดของผู้เล่นและลีดเดอร์บอร์ดเพื่อให้ข้อเสนอแนะภาพการตอบสนองฟังก์ชันนี้คล้ายกับรหัสที่ทำให้เกิดอันตรายต่อผู้เล่นใน สร้างอันตรายผู้เล่นให้โมเดล Character และ Humanoid สำหรับผู้เล่นที่กําลังอัพเกรดอยู่, ฟังก์ชันอัปเดตคุณสมบัติ JumpPower เป็นค่าใหม่ที่เก็บไว้โดย PlayerData , เพิ่มขึ้น 30หากคุณต้องการให้เกมของคุณยาวนานขึ้นเล็กน้อย คุณสามารถลดตัวเลขนี้ได้
ตรวจสอบคำขอเซิร์ฟเวอร์ - onPurchaseJumpIncrease() ตรวจสอบครั้งแรกว่าผู้เล่นมีจํานวนเหรียญที่จําเป็นสําหรับการซื้ออัพเกรด คำขอทั้งหมด จากไคลเอนต์ไปยังเซิร์ฟเวอร์ควรเป็น ถูกตรวจสอบ เพื่อป้องกันไม่ให้ผู้กระทำผิดส่งคำขอปลอมและใช้ประโยชน์จากประสบการณ์ของคุณ
เพิ่มปุ่มใน GUI ของผู้เล่น
วัตถุ ScreenGui จะแสดงบนหน้าจอเฉพาะถ้ามันถูกผูกกับวัตถุ PlayerGui ของผู้เล่นโดยค่าเริ่มต้น สิ่งนี้จะมีกุยของระบบเช่นหน้าต่างแชทตอนนี้คุณต้องสร้างสคริปต์ใน ReplicatedStorage เพื่อคัดลอกปุ่มอัพเกรดใน GUI ของผู้เล่นแต่ละคนและดำเนินการตามพฤติกรรมเมื่อกด
เพื่อเพิ่มปุ่มใน GUI ของผู้เล่นเมื่อพวกเขาเข้าร่วม:
ในหน้าต่าง สํารวจ สร้าง สคริปต์ ใน ReplicatedStorage 2. เลือกสคริปต์จากนั้นในหน้าต่าง คุณสมบัติ 1. ตั้ง ชื่อ เป็น JumpButtonClickHandler . 2. ตั้ง RunContext เป็น ไคลเอนต์ . สิ่งนี้จะบอกให้เครื่องยนต์ทำงานเสมอในการดำเนินสคริปต์นี้บนไคลเอนต์เพื่อเพิ่มประสิทธิภาพการสื่อสารเครือข่าย
ในสคริปต์เปิด แทนที่รหัสเริ่มต้นด้วยรหัสต่อไปนี้:
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Players = game:GetService("Players")local player = Players.LocalPlayerlocal playerGui = player.PlayerGuilocal IncreaseJumpPowerFunction = ReplicatedStorage.Instances.IncreaseJumpPowerFunctionlocal jumpPurchaseGui = ReplicatedStorage.Instances.JumpPurchaseGuilocal jumpButton = jumpPurchaseGui.JumpButtonlocal function onButtonClicked()local success, purchased = pcall(IncreaseJumpPowerFunction.InvokeServer, IncreaseJumpPowerFunction)if not success then-- ซื้อจะเป็นข้อความแจ้งข้อผิดพลาดหากความสําเร็จเป็นเท็จerror(purchased)elseif success and not purchased thenwarn("Not enough coins!")endendjumpButton.Activated:Connect(onButtonClicked)-- เพิ่ม JumpPurchaseGui ไปยัง Gui ของผู้เล่นjumpPurchaseGui.Parent = playerGuiคําอธิบายโค้ดส่วนต่อไปอธิบายรหัสในรายละเอียดเพิ่มเติม
- รับการอ้างอิงถึงฟังก์ชัน GUI และเซิร์ฟเวอร์ - ตัวแปร IncreaseJumpPowerFunction , jumpPurchaseGui และ jumpButton มีการอ้างอิงถึงฟังก์ชันและ GUI ที่เรียกฟังก์ชันที่คุณต้องการในภายหลัง
- กำหนดตัวจัดการเหตุการณ์ - onButtonClicked() กำหนดโลจิสติกสำหรับเมื่อผู้ใช้คลิกปุ่มอัพเกรดมันใช้ pcall() (การโทรป้องกัน) เพื่อเรียกใช้ RemoteFunctionการสื่อสารระหว่างไคลเอนต์และเซิร์ฟเวอร์ใดๆ เช่นนี้ต้องใช้ pcall() ในการจัดการข้อผิดพลาดหรือปัญหาการเชื่อมต่อ
- เชื่อมต่อตัวจัดการกับปุ่ม - อีเวนต์ Activated สามารถใช้งานได้บนทุกแพลตฟอร์มรวมถึงเมาส์ หน้าจอสัมผัส หรือคอนเท็กซ์เกมแพดมันจะเริ่มตอนที่มีการคลิก , แตะ , หรือ เกมแพดปุ่ม ถูกปล่อยออกมา
ทดสอบการเล่น
ตอนนี้คุณควรจะสามารถซื้อการอัพเกรดการกระโดดสำหรับเหรียญโดยใช้ปุ่มอัพเกรดได้แล้ว เพื่อทดสอบโครงการ:
ในแถบเครื่องมือ คลิกปุ่ม เล่น คุณจะเข้าสู่โหมดการทดสอบเล่น Studio
หากสคริปต์ทำงานอย่างถูกต้อง ปุ่มสำหรับซื้อพลังการกระโดดจะปรากฏบนหน้าจอลองคลิกปุ่มก่อนที่คุณจะรวบรวมเหรียญใดๆ เพื่อตรวจสอบว่าไม่ได้มอบพลังการกระโดดเพิ่มเติมให้คุณแล้วลองรวบรวมเหรียญบางส่วนและดูว่าการอัปเกรดทำงานได้หรือไม่เมื่อคุณคลิกอีกครั้ง
ตอนนี้ที่โค้ดสมบูรณ์แล้ว ลองปรับความสมดุลของเกมผ่านปริมาณและตำแหน่งของเหรียญเพิ่มเหรียญเพิ่มเติมหากเกมรู้สึกช้าเกินไปหรือหักเหรียญและวางไว้ในสถานที่ที่ท้าทายหากรู้สึกเร็วและง่ายเกินไป