การตั้งค่าประสบการณ์ ช่วยให้คุณอัปเดตค่าภายในเกมแบบเรียลไทม์โดยไม่ต้องรีสตาร์ทเซิร์ฟเวอร์:
- เปิดหรือปิดฟีเจอร์ต่างๆ เช่น การเปิดหรือปิดดันเจี้ยนการเริ่มต้นใหม่
- ปรับค่าภายในเกม เช่น พลังชีวิตของบอส, การได้รับประสบการณ์, หรือราคาสินค้า
- เปิดเนื้อหาที่มีเวลาจำกัด เช่น อีเวนต์ฮาโลวีนที่เริ่มในเที่ยงคืน
- มอบค่าที่แตกต่างให้กับผู้เล่นที่แตกต่างกัน เช่น การมอบเกราะเพิ่มเติมให้กับผู้เล่นใหม่
การตั้งค่ามีรูปแบบเป็นคีย์และค่า แทนที่จะใช้ค่าคงที่ที่กำหนดไว้ในโค้ดของคุณ คุณสามารถใช้คีย์เพื่อดึงค่าหนึ่ง (สตริง, หมายเลข, บูลีน, หรือวัตถุ JSON) และจากนั้นอัปเดตค่านั้นเมื่อใดก็ได้โดยไม่ต้องเผยแพร่เวอร์ชันใหม่ของประสบการณ์ของคุณ การเปลี่ยนแปลงโค้ดที่จำเป็นมีน้อยมาก:
local ConfigService = game:GetService("ConfigService")
local configSnapshot = ConfigService:GetConfigAsync()
local myValue = configSnapshot:GetValue("my_key_name")คุณสามารถมีการตั้งค่าที่ใช้งานได้สูงสุด 1,000 รายการในเวลาใดก็ได้และจัดการพวกเขาได้ที่ Creator Hub หรือใน Roblox Studio

สร้างและแก้ไขการตั้งค่า
บนหน้าการตั้งค่า Creator Hub สำหรับประสบการณ์ของคุณ ให้คลิก สร้างการตั้งค่า
ระบุคีย์, ประเภท, ค่า, และอาจจะมีคำอธิบายเพื่อช่วยคุณหรือทีมของคุณในการระบุวัตถุประสงค์ของการตั้งค่าในภายหลัง ประเภทที่รองรับคือ สตริง, หมายเลข, บูลีน, และวัตถุ JSON คลิก ถัดไป
(ไม่บังคับ) เพิ่มเงื่อนไขและค่าที่กำหนดเป้าหมาย เงื่อนไขช่วยให้คุณสามารถใช้ค่าการตั้งค่ากับผู้ใช้ที่ตรงตาม (หรือตรงกันข้าม) เกณฑ์บางประการ เช่น ผู้ใช้ที่ไม่เคยเล่นเกมของคุณหรือผู้ที่พูดภาษาโปรตุเกส สำหรับข้อมูลเพิ่มเติม โปรดดูที่ กำหนดเป้าหมายการตั้งค่าสำหรับผู้เล่นเฉพาะ
คัดลอกโค้ดที่สร้างขึ้นไปยังสคริปต์เซิร์ฟเวอร์ในประสบการณ์ของคุณ โดยปกติจะอยู่ใน ServerScriptService สำหรับการตั้งค่าที่ "ทั่วโลก" ที่ไม่แตกต่างกันตามผู้เล่น โค้ดอาจมีลักษณะดังนี้:
local ConfigService = game:GetService("ConfigService")local configSnapshot = ConfigService:GetConfigAsync()local MY_KEY = "my_key" -- ไม่บังคับ, เก็บคีย์การตั้งค่าเป็นค่าคงที่local myValue = configSnapshot:GetValue(MY_KEY)สำหรับ การตั้งค่าเงื่อนไข และ การทดลอง โค้ดจะแตกต่างเล็กน้อย:
local ConfigService = game:GetService("ConfigService")local Players = game:GetService("Players")local MY_KEY = "my_key" -- ไม่บังคับ, เก็บคีย์การตั้งค่าเป็นค่าคงที่local function onPlayerAdded(player)local playerConfigSnapshot = ConfigService:GetConfigForPlayerAsync(player)local myValue = playerConfigSnapshot:GetValue(MY_KEY)endPlayers.PlayerAdded:Connect(onPlayerAdded)ใช้ค่าเหมือนกับตัวแปรอื่นๆ การตั้งค่า ไม่มีผล หากคุณไม่ใช้มันในโค้ดของคุณ
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการทำงานกับการตั้งค่าในสคริปต์ของคุณ โปรดดูที่ เพิ่มการตั้งค่าในโค้ดของคุณ
การแก้ไขการตั้งค่าไม่มีความแตกต่างจากการสร้างหนึ่ง คลิกที่ปุ่ม แก้ไข และอัปเดตค่าและคำอธิบายตามต้องการ
ขีดจำกัด
ค่าการตั้งค่ามีขีดจำกัดดังต่อไปนี้ตามประเภท
| ประเภท | ขนาดสูงสุด |
|---|---|
| สตริง | 100,000 ตัวอักษร |
| หมายเลข | ±1.7976931348623157e+308, ±2^53 สำหรับการแสดงผลจำนวนเต็มที่แน่นอน |
| บูลีน | N/A |
| JSON | 100,000 ตัวอักษร |
เผยแพร่การตั้งค่า
หลังจากที่คุณสร้างการตั้งค่า มันจะย้ายไปยังสถานะ กำลังจัดเตรียม เพื่อให้คุณสามารถทดสอบก่อนที่จะเผยแพร่ให้สาธารณะ การเปลี่ยนแปลงที่กำลังจัดเตรียมจะมีให้คุณและทีมของคุณในเซสชันการเล่น Studio แต่ไม่ใช่สำหรับผู้เล่นในประสบการณ์ที่ใช้งานอยู่ หน้าการตั้งค่าใน Creator Hub จะแสดงการเปลี่ยนแปลงที่ใช้งานอยู่และกำลังจัดเตรียมทั้งหมด

- หลังจากที่คุณทดสอบการเปลี่ยนแปลงที่กำลังจัดเตรียมของคุณแล้ว ให้คลิก เผยแพร่ตอนนี้ เพื่อเผยแพร่ให้กับผู้เล่นทั้งหมดเกือบจะทันที (ประมาณ 15 วินาทีถึง 1 นาที) คุณยังสามารถเลือก เผยแพร่ใน 15 นาที หากคุณต้องการระยะเวลาการเผยแพร่ที่ยาวนานและค่อยเป็นค่อยไป ในบางกรณี ลูกค้าอาจใช้เวลาสักครู่ในการสะท้อนการเปลี่ยนแปลงหลังจากการเผยแพร่
- (แนะนำ) เพิ่มข้อความการเผยแพร่ที่มีคำอธิบายซึ่งระบุสิ่งที่คุณอัปเดต ข้อความนี้จะแสดงในหน้าประวัติและสามารถช่วยคุณและทีมของคุณในการระบุวัตถุประสงค์ของการเปลี่ยนแปลงในภายหลัง
กำหนดเป้าหมายการตั้งค่าสำหรับผู้เล่นเฉพาะ
ตามค่าเริ่มต้น การตั้งค่าจะส่งมอบค่าที่เหมือนกันให้กับทุกคน การตั้งค่าเงื่อนไข ช่วยให้คุณสามารถส่งมอบค่าที่แตกต่างกันให้กับผู้เล่นที่แตกต่างกันตามคุณลักษณะของผู้เล่น (ประเทศ, ระยะเวลา, ภาษา, สถานะผู้จ่าย, ฯลฯ)
การตั้งค่าเงื่อนไขมีสามส่วนที่กำหนดว่าผู้เล่นจะได้รับค่าที่ใด:
- กฎเงื่อนไข กำหนดว่าใครตรงตามเงื่อนไข แต่ละกฎเป็นนิพจน์เชิงตรรกะ เช่น "ผู้จ่ายที่ใช้งานอยู่ใน 30 วันแรก" ที่ประเมินคุณลักษณะของผู้เล่น
- การจัดลำดับกฎ กำหนดวิธีการเลือกเมื่อผู้เล่นตรงตามกฎมากกว่าหนึ่งกฎ Roblox จะประเมินกฎจากบนลงล่างและใช้สาขาที่ตรงกันแรก กฎจะถูกจัดลำดับทั่วโลก โดยไม่คำนึงถึงลำดับที่คุณเพิ่มค่าที่มีเงื่อนไขให้กับคีย์เฉพาะ
- ค่าที่มีเงื่อนไข กำหนดสิ่งที่ผู้เล่นที่ตรงตามเงื่อนไขจะได้รับ สำหรับแต่ละเงื่อนไข คุณจะต้องแนบค่าหนึ่ง หากผู้เล่นตรงตามกฎภายในเงื่อนไขนั้น พวกเขาจะได้รับค่าที่เกี่ยวข้อง; มิฉะนั้น พวกเขาจะได้รับค่าดีฟอลต์ของการตั้งค่า
คุณลักษณะที่รองรับ
การตั้งค่าเงื่อนไขรองรับคุณลักษณะดังต่อไปนี้ คุณลักษณะเหล่านี้มีการกำหนดเหมือนกับ ตัวกรอง และ การแบ่งกลุ่ม ที่เทียบเท่าในแดชบอร์ดการวิเคราะห์
| คุณลักษณะ | คำอธิบาย |
|---|---|
| ประเทศ | สถานที่ทางภูมิศาสตร์ของผู้เล่น |
| ภาษา | การตั้งค่าภาษา ของผู้เล่น |
| ใหม่ vs กลับมา | ผู้เล่นกำลังเล่นประสบการณ์ของคุณเป็นครั้งแรกหรือเคยเล่นมาก่อน |
| แหล่งที่มา | ผู้เล่นพบประสบการณ์ของคุณได้อย่างไร เช่น คำแนะนำในหน้าแรก, การค้นหา, หรือโฆษณาที่สนับสนุน |
| เมื่อผู้ใช้เล่นครั้งแรก | ผู้เล่นเล่นประสบการณ์ของคุณเมื่อไหร่ เช่น 0-30 วันก่อนหรือ 31-90 วันก่อน คำนวณรายวัน |
| สถานะผู้จ่ายที่ใช้งานอยู่ในประสบการณ์ | กิจกรรมการชำระเงินของผู้เล่นภายในประสบการณ์ของคุณ ซึ่งช่วยให้คุณกำหนดเป้าหมายกลุ่มผู้ใช้ที่จ่ายเงินที่แตกต่างกัน คำนวณรายวัน |
| สถานะกิจกรรมในประสบการณ์ | ผู้เล่นเล่นประสบการณ์ของคุณเมื่อไหร่ล่าสุด ซึ่งช่วยให้คุณสามารถจัดการผู้เล่นใหม่, ที่ใช้งานอยู่, ที่หยุดเล่น, และที่กลับมาเล่นใหม่ได้แตกต่างกัน คำนวณรายวัน |
| การมีส่วนร่วมของผู้ใช้ | ผู้เล่นเล่นประสบการณ์ของคุณมากน้อยเพียงใดในแต่ละสัปดาห์ ซึ่งช่วยให้คุณแยกผู้เล่นที่มีส่วนร่วมมากที่สุดออกจากผู้เล่นที่เล่นแบบสบายๆ คำนวณรายวัน |
| สถานะผู้ใช้จ่ายในแพลตฟอร์ม | ผู้เล่นเป็นผู้ใช้จ่ายที่ใช้งานอยู่ในแพลตฟอร์ม Roblox หรือไม่ คำนวณรายวัน |
| สถานะกิจกรรมในแพลตฟอร์ม | ผู้เล่นเล่นที่ไหนสักแห่งใน Roblox เมื่อไหร่ล่าสุด แทนที่จะเล่นเฉพาะในประสบการณ์ของคุณ คำนวณรายวัน |
สร้างค่าที่มีเงื่อนไข
คุณสามารถเพิ่มเงื่อนไขเมื่อคุณสร้างหรือแก้ไขการตั้งค่า ในขั้นตอน เพิ่มการกำหนดเป้าหมาย ให้เพิ่มเงื่อนไข:
- เลือกเงื่อนไขที่มีอยู่หรือคลิก สร้างใหม่
- เพิ่มกฎหนึ่งหรือมากกว่า
- ตั้งค่าที่ผู้เล่นที่ตรงตามเงื่อนไขจะได้รับ
ตัวอย่างเช่น หากต้องการมอบประสบการณ์ที่ยากขึ้นให้กับผู้จ่ายที่ใช้งานอยู่ที่เริ่มเล่นภายใน 30 วันที่ผ่านมา คุณอาจเพิ่มค่าของ dynamicBossHealth

เข้าถึงค่าที่กำหนดเป้าหมายในโค้ด
ในการดึงค่าที่กำหนดเป้าหมาย ใช้ ConfigService:GetConfigForPlayerAsync() ซึ่งจะประเมินกฎและการจัดลำดับสำหรับผู้เล่นแต่ละคน ConfigService:GetConfigAsync() จะ ไม่ ใช้การกำหนดเป้าหมายเพราะมันไม่เฉพาะเจาะจงต่อผู้เล่นคนเดียว สำหรับข้อมูลเพิ่มเติม โปรดดูที่ เพิ่มการตั้งค่าในโค้ดของคุณ
แนวทางปฏิบัติที่ดีที่สุดและขีดจำกัด
- ค่าที่มีเงื่อนไขแต่ละค่าต้องตรงกับประเภทข้อมูล (บูลีน, สตริง, หมายเลข, หรือ JSON) ของค่าดีฟอลต์ของการตั้งค่า
- คุณสามารถมีได้สูงสุด 100 เงื่อนไขต่อเกม
- คีย์การตั้งค่าแต่ละคีย์รองรับได้สูงสุด 20 เงื่อนไข
- ตรวจสอบการจัดลำดับกฎก่อนที่คุณจะเผยแพร่ เนื่องจากกฎจะถูกจัดลำดับทั่วโลก ให้ยืนยันว่าลำดับการประเมินของคุณมีลำดับความสำคัญที่ถูกต้อง เพื่อทบทวนลำดับ ให้คลิกที่แท็บ เงื่อนไข
สร้างและแก้ไขการตั้งค่าใน Studio
หากคุณต้องการ คุณสามารถสร้าง แก้ไข จัดเตรียม และเผยแพร่การตั้งค่าใน Roblox Studio คลิก ไฟล์ > เปิดการตั้งค่า เพื่อเปิดวิดเจ็ต อินเทอร์เฟซของ Studio สะดวกโดยเฉพาะสำหรับการจัดเตรียมและทดสอบค่าที่ใหม่

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

ในกล่องโต้ตอบที่ปรากฏขึ้น ให้ค้นหาและเลือกประสบการณ์เป้าหมายจากรายการกลุ่มที่คุณมีสิทธิ์แก้ไข

ดูประวัติและกู้คืนการตั้งค่า
ในหน้าการตั้งค่า คลิก ประวัติ เพื่อดูการอัปเดตที่ผ่านมา แต่ละการอัปเดตมีเวลาและวันที่ของการเปลี่ยนแปลง ใครเป็นผู้ทำการเปลี่ยนแปลง และข้อความการเผยแพร่

- ขยายแต่ละแถวเพื่อดูคีย์ ค่าก่อนการเปลี่ยนแปลง และค่าหลังจากนั้น
- ใช้กล่อง ค้นหาคีย์ เพื่อค้นหาคีย์—ไม่ใช่คำอธิบายหรือค่า เพียงแค่คีย์
หน้าประวัติยังช่วยให้คุณกู้คืนการตั้งค่าไปยังสถานะก่อนหน้า:
- คลิก กู้คืน ข้างการเปลี่ยนแปลงเพื่อจัดเตรียมค่าก่อนหน้า โปรดทราบว่าการกู้คืนการตั้งค่าจะทำให้การเปลี่ยนแปลงที่กำลังจัดเตรียมอยู่ในปัจจุบันถูกทิ้ง
- กลับไปที่หน้าการตั้งค่าและ เผยแพร่การตั้งค่า
เพิ่มการตั้งค่าในโค้ดของคุณ
คลาสหลักสำหรับการทำงานกับการตั้งคือ ConfigService ซึ่งดึงคีย์และค่าล่าสุดสำหรับประสบการณ์ของคุณ ConfigService จะมีให้เฉพาะในสคริปต์เซิร์ฟเวอร์ การพยายามเรียกใช้วิธีการของมันจากสคริปต์ของลูกค้าจะทำให้เกิดข้อผิดพลาด
ขั้นตอนแรกในการทำงานกับการตั้งค่าคือการดึง ConfigSnapshot ค่าล่าสุดสำหรับการตั้งค่าทั้งหมด ณ จุดปัจจุบัน มีสองวิธีในการรับภาพรวม:
ConfigService:GetConfigAsync() ใช้สำหรับการตั้งค่าทั่วไปที่คุณต้องการใช้กับผู้เล่นทั้งหมดในประสบการณ์:
local ConfigService = game:GetService("ConfigService")local configSnapshot = ConfigService:GetConfigAsync()local bossHealth = configSnapshot:GetValue("bossHealth")ConfigService:GetConfigForPlayerAsync() ดึงการตั้งค่าที่เฉพาะเจาะจงสำหรับผู้เล่นเพื่อให้ผู้เล่นที่แตกต่างกันสามารถได้รับค่าที่แตกต่างกัน ใช้สำหรับ การตั้งค่าเงื่อนไข และ การทดลอง
local ConfigService = game:GetService("ConfigService")local Players = game:GetService("Players")local function onPlayerAdded(player)local playerConfigSnapshot = ConfigService:GetConfigForPlayerAsync(player)local bossHealth = playerConfigSnapshot:GetValue("bossHealth")endPlayers.PlayerAdded:Connect(onPlayerAdded)
ในทั้งสองกรณี หากคีย์ไม่มีอยู่ ConfigSnapshot:GetValue() จะส่งคืน nil
การเติมอัตโนมัติ
การตั้งค่าจะถูกรวมเข้ากับการเติมอัตโนมัติของ Script Editor เมื่อคุณเรียกใช้ ConfigSnapshot:GetValue() ตัวแก้ไขจะแนะนำชื่อคีย์การตั้งค่าของคุณและแสดงประเภทของการตั้งค่าทุกครั้งเมื่อคุณชี้ไปที่ชื่อของตัวแปร
หากสคริปต์ของคุณใช้โหมด --!strict ตัวตรวจสอบสามารถตรวจจับและตรวจสอบประเภทให้คุณได้
การเติมอัตโนมัติยังทำงานกับการตั้งค่าที่ใช้ประเภท JSON ที่ซับซ้อน
รีเฟรชภาพรวม
ConfigSnapshots แสดงถึงจุดในเวลา สถานะของการตั้งค่าเมื่อคุณขอภาพรวม เพื่อหลีกเลี่ยงการรบกวนการเล่นเกม การอัปเดตการตั้งค่าจะ ไม่ ถูกส่งต่อไปยังภาพรวมโดยอัตโนมัติ ในเกมยิงที่แข่งขันกัน ตัวอย่างเช่น คุณอาจต้องการให้ค่าการตั้งค่าใหม่ระหว่างรอบเท่านั้นเพื่อไม่ให้คุณลักษณะของอาวุธเปลี่ยนแปลงกลางการแข่งขัน
เพื่อให้ได้ค่าล่าสุดด้วยตนเอง ให้ใช้วิธี ConfigSnapshot:Refresh() คุณสามารถเชื่อมต่อฟังก์ชันกับเหตุการณ์ ConfigSnapshot.UpdateAvailable เพื่อรีเฟรชโดยอัตโนมัติ:
configSnapshot.UpdateAvailable:Connect(function()
configSnapshot:Refresh()
end)หลังจากที่คุณรีเฟรชภาพรวมแล้ว คุณสามารถใช้ ConfigSnapshot:GetValueChangedSignal() เพื่อฟังการเปลี่ยนแปลงของคีย์เฉพาะเพื่อให้คุณสามารถอัปเดตโค้ดของประสบการณ์ของคุณ:
configSnapshot:GetValueChangedSignal("bossHealth"):Connect(function(newHealthValue)
spawnNewBoss(newHealthValue)
end)การจัดการข้อผิดพลาด
ในกรณีที่หายากเมื่อการตั้งค่าไม่สามารถโหลดได้และไม่เคยถูกโหลดมาก่อน ConfigService:GetConfigAsync() จะโยนข้อผิดพลาด
หาก ConfigService สูญเสียการเชื่อมต่อกับเซิร์ฟเวอร์ Roblox หลังจากที่มันถูกโหลดไปแล้ว ConfigService:GetConfigAsync() จะส่งคืนภาพรวมที่มีค่าล่าสุดที่มีอยู่ ภาพรวมเหล่านี้จะพยายามเชื่อมต่อใหม่และเรียกเหตุการณ์ UpdateAvailable เมื่อพวกเขาโหลดการอัปเดตใหม่ได้สำเร็จ
วิธีที่คุณจัดการกับสถานการณ์ที่ไม่ธรรมดาเหล่านี้ขึ้นอยู่กับคุณ คุณสามารถห่อหุ้มการเรียกใน pcall() และมีค่าตกสำรองในโค้ดของคุณ แสดงข้อผิดพลาดให้ผู้เล่นเห็นและรอให้ภาพรวมเชื่อมต่อใหม่ หรือใช้วิธีแก้ปัญหาอื่น
ทดสอบการตั้งค่า
ConfigService มีวิธีการในตัวสำหรับการทดสอบการเปลี่ยนแปลงการตั้งค่าแบบชั่วคราวทั้งใน Studio และบนเซิร์ฟเวอร์ที่ใช้งานอยู่โดยไม่กระทบต่อประสบการณ์ทั้งหมด
ในการตั้งค่าค่าทดสอบในท้องถิ่น ให้เรียกใช้ ConfigService:SetTestingValue() จากสคริปต์เซิร์ฟเวอร์หรือผ่าน Developer Console การเปลี่ยนแปลงค่าทดสอบจะกระตุ้นการอัปเดตการตั้งค่าพร้อมกับสัญญาณ ConfigSnapshot.UpdateAvailable เช่นเดียวกับการอัปเดตการผลิต คุณต้องรีเฟรชภาพรวมที่มีอยู่เพื่อให้ได้ค่าทดสอบ:
local ConfigService = game:GetService("ConfigService")
ConfigService:SetTestingValue("bossHealth", 200)
local configSnapshot = ConfigService:GetConfigAsync()
local bossHealth = configSnapshot:GetValue("bossHealth") -- ตอนนี้ 200!การเปลี่ยนแปลงการทดสอบจะมีผลตลอดอายุของเซิร์ฟเวอร์ปัจจุบันและจะไม่ส่งต่อไปยังเซิร์ฟเวอร์อื่น ใน Studio จะมีผลต่อเซสชันการเล่นปัจจุบันและจะไม่ส่งผลกระทบต่อเซิร์ฟเวอร์ที่ใช้งานอยู่ คุณสามารถลบการเปลี่ยนแปลงการทดสอบด้วย ConfigService:ClearTestingValue().