เกมมักต้องเก็บข้อมูลบางอย่างระหว่างเซสชันเช่นระดับของผู้เล่น, คะแนนประสบการณ์, รายการสินค้าคงคลัง, เงิน/ทอง, และอื่น ๆ อีกมากมาย
การกวดวิชานี้จะแสดงให้คุณเห็นวิธีการสร้าง เก็บข้อมูลพื้นฐาน รับตัวอย่างข้อมูล และอ่านข้อมูลกลับไปในเซสชันเกม
เปิดใช้งานการเข้าถึงสตูดิโอ
ตามปกติ เกมที่ทดสอบใน Studio ไม่สามารถเข้าถึงห้องเก็บข้อมูลดังนั้นคุณจึงต้องเปิดให้เป็นระเบียบาทก่อน
ตรวจสอบให้แน่ใจว่าเกมของคุณเป็น เผยแพร่ (ไฟล์ > เผยแพร่ไปยัง Roblox) เพื่อเปิดใช้งานการเข้าถึง Studio
จากแท็บ หน้าแรก เปิดหน้าต่าง การตั้งค่าเกม
ในส่วน ความปลอดภัย เปิดใช้งาน เปิดใช้งานการเข้าถึง API ของ Studio ให้บริการเชื่อมต่อกับ API ของคุณ
คลิก บันทึก เพื่อลงทะเบียนการเปลี่ยนแปลงของคุณ
การสร้างห้องเก็บข้อมูล
ร้านค้าข้อมูลจะได้รับการระบุด้วยชื่อที่ไม่เหมือนใคร ชื่อผู้เล่นทอง ในตัวอย่างนี้ร้านค้าข้อมูลชื่อว่า PlayerGold จะบันทึกทองของผู้เล่นแต่ละรายไว้ในที่เก็บข้อมูลที่คงที่
สร้าง Script ใหม่ภายใน ServerScriptService ที่เรียกว่า GoldManager
รับบริการจาก DataStoreService เพื่อให้บริการในตัวแรก
local DataStoreService = game:GetService("DataStoreService")โทร DataStoreService:GetDataStore() ด้วยสตริง "PlayerGold" นี้จะเข้าถึง PlayerGold ร้านค้าข้อมูลหากมันมีอยู่แล้วหรือสร้างมันอย่างอื่น
local DataStoreService = game:GetService("DataStoreService")local goldStore = DataStoreService:GetDataStore("PlayerGold")
การบันทึกข้อมูล
ห้องเก็บข้อมูลเป็นพจนานุกรมในทางกลับกัน Lua ตารางเป็นตัวอักษรชื่อเดียวกันสำหรับผู้เล่นหรือเพียงชื่อสตริงที่ชื่อนี้สตริงนี้สตริงนี้สตริงนี้สตริงนี้สตริงนี้สตริงนี้ส
ตัวอย่างข้อมูลผู้เล่น
กุญแจ | มูลค่า |
---|---|
31250608 และ | 50 |
351675979 | 20 |
505306092 | 78000 |
ตัวอย่างโปรโมชัน
กุญแจ | มูลค่า |
---|---|
อีเวนต์พิเศษ | ปาร์ตี้ฤดูร้อน2 |
รหัสโปรโมชันที่ใช้งานอยู่ | โบนัส123 |
สามารถเข้าถึงสถานที่ได้ | จริง |
ร้านค้า:
สร้างตัวแปรที่มีชื่อว่า playerUserID คีย์จากนั้นใช้ playerGold เพื่อเก็บจำนวนเงินเริ่มต้นของผู้เล่น
local DataStoreService = game:GetService("DataStoreService")local goldStore = DataStoreService:GetDataStore("PlayerGold")-- รหัสและมูลค่าของตัวเก็บข้อมูลlocal playerUserID = 505306092local playerGold = 250เพื่อบันทึกข้อมูลใน PlayerGold ร้านค้า, โทร Class.GlobalDataStore:SetAsync()|SetAsync ภายในโทรศัพท์ที่ป้องกัน, ผ่านตัวแปรและค่าที่สร้างขึ้นก่อนหน้านี้ เรียกว่า key และมีค่าประมาณ
local DataStoreService = game:GetService("DataStoreService")local goldStore = DataStoreService:GetDataStore("PlayerGold")-- รหัสและมูลค่าของตัวเก็บข้อมูลlocal playerUserID = 505306092local playerGold = 250-- คีย์local setSuccess, errorMessage = pcall(function()goldStore:SetAsync(playerUserID, playerGold)end)if not setSuccess thenwarn(errorMessage)end
ฟังก์ชันเช่น SetAsync() เป็นการโทรเครือข่ายที่อาจจะล้มเหลวได้ในบางครั้ง ด้านบนแสดงให้เห็นว่า pcall() เกิดขึ้น
ในรูปแบบพื้นฐานที่สุด pcall() รับฟังก์ชันและส่งคืนสองค่า:
- สถานะ ( boolean ) จะเป็นจริงหากคุณสั่งให้ฟังก์ชันนี้ทำงานโดยไม่มีข้อผิดพลาดหรือปลอมแปลง หรือ false อย่างอื่น
- ค่าการกลับของฟังก์ชันหรือข้อความผิดพลาด
ในตัวอย่างด้านบนสถานะ ( setSuccess ) ได้รับการทดสอบในแถวที่ 12 และหาก SetAsync() ล้มเหลวด้วยเหตุผลใด ๆ ก็จะปรากฏ errorMessage ในหน้าต่างการออก
การอ่านข้อมูล
ร้านค้าโปรดโทร GetAsync() ด้วยชื่อกุญแจที่ต้องการ
local setSuccess, errorMessage = pcall(function()goldStore:SetAsync(playerUserID, playerGold)end)if not setSuccess thenwarn(errorMessage)end-- อ่านคีย์เก็บข้อมูลlocal getSuccess, currentGold = pcall(function()return goldStore:GetAsync(playerUserID)end)if getSuccess thenprint(currentGold)endเพื่อทดสอบสคริปต์, คลิก วิ่ง และสังเกต currentGold มูลค่าที่พิมพ์ออกไปที่ หน้าต่างการออก력 โปรดทราบว่ามันอาจใช้เวลาสองวินาทีเนื่องจากฟังก์ชันต้องเชื่อมต่อกับ
โครงการตัวอย่าง
ตอนนี้คุณเข้าใจการใช้งานของพื้นที่เก็บข้อมูลพื้นฐานแล้ว ลองทดสอบในเกมตัวอย่าง
ทองคำรุ่นที่สาม รวบรวมเหรียญทองมากที่สุดเท่าที่คุณจะทำได้เพื่อตั้งสถิติส่วนบุคคลที่คงอยู่ระหว่างเซสชันเกม
คุณยังสามารถแก้ไขเกมใน Studio และสำรวจสคริปต์ GoldManager ที่ปรับปรุงซึ่งรวมถึงการบันทึกข้อมูลอัตโนมัติและอื่น ๆ