Cấu hình trải nghiệm cho phép bạn cập nhật các giá trị trong trò chơi theo thời gian thực mà không cần khởi động lại máy chủ:
- Bật và tắt các tính năng, chẳng hạn như kích hoạt hoặc vô hiệu hóa một ngục tối hướng dẫn mới.
- Điều chỉnh các giá trị trong trò chơi như sức khỏe của boss, lượng kinh nghiệm nhận được, hoặc giá của các vật phẩm.
- Khởi động nội dung theo thời gian, chẳng hạn như một sự kiện Halloween bắt đầu vào giữa đêm.
- Cung cấp các giá trị khác nhau cho các người chơi khác nhau, chẳng hạn như cho những người chơi mới thêm giáp.
Cấu hình có dạng các khóa và giá trị. Thay vì sử dụng các hằng số mã cứng trong mã của bạn, bạn có thể sử dụng khóa để lấy một giá trị (chuỗi, số, boolean hoặc đối tượng JSON) và sau đó cập nhật giá trị đó bất cứ khi nào bạn muốn mà không cần phát hành một phiên bản mới của trải nghiệm của bạn. Các thay đổi mã cần thiết là tối thiểu:
local ConfigService = game:GetService("ConfigService")
local configSnapshot = ConfigService:GetConfigAsync()
local myValue = configSnapshot:GetValue("my_key_name")Bạn có thể có tối đa 1.000 cấu hình hoạt động tại bất kỳ thời điểm nào và quản lý chúng trên Creator Hub hoặc trong Roblox Studio.

Tạo và chỉnh sửa cấu hình
Trên trang Creator Hub Cấu hình cho trải nghiệm của bạn, nhấp vào Tạo cấu hình.
Chỉ định một khóa, một loại, một giá trị, và tùy chọn, một mô tả để giúp bạn hoặc nhóm của bạn sau này xác định mục đích của cấu hình. Các loại được hỗ trợ là chuỗi, số, boolean và đối tượng JSON. Nhấp vào Tiếp theo.
(Tùy chọn) Thêm các điều kiện và giá trị nhắm mục tiêu. Các điều kiện cho phép bạn áp dụng các giá trị cấu hình cho người dùng phù hợp (hoặc không phù hợp) với các tiêu chí nhất định, chẳng hạn như người dùng chưa bao giờ chơi trò chơi của bạn hoặc những người nói tiếng Bồ Đào Nha. Để tìm hiểu thêm, xem Nhắm cấu hình đến người chơi cụ thể.
Sao chép đoạn mã được tạo vào một kịch bản máy chủ trong trải nghiệm của bạn, có thể là trong ServerScriptService. Đối với các cấu hình "toàn cầu" không khác nhau theo người chơi, mã có thể trông giống như sau:
local ConfigService = game:GetService("ConfigService")local configSnapshot = ConfigService:GetConfigAsync()local MY_KEY = "my_key" -- tùy chọn, lưu trữ khóa cấu hình như một hằng sốlocal myValue = configSnapshot:GetValue(MY_KEY)Đối với cấu hình điều kiện và thí nghiệm, mã sẽ hơi khác:
local ConfigService = game:GetService("ConfigService")local Players = game:GetService("Players")local MY_KEY = "my_key" -- tùy chọn, lưu trữ khóa cấu hình như một hằng sốlocal function onPlayerAdded(player)local playerConfigSnapshot = ConfigService:GetConfigForPlayerAsync(player)local myValue = playerConfigSnapshot:GetValue(MY_KEY)endPlayers.PlayerAdded:Connect(onPlayerAdded)Sử dụng giá trị như bạn sẽ sử dụng bất kỳ biến nào khác. Cấu hình không làm gì cả trừ khi bạn sử dụng chúng trong mã của bạn.
Để biết thêm thông tin về việc làm việc với các cấu hình trong mã của bạn, xem Thêm cấu hình vào mã của bạn.
Chỉnh sửa một cấu hình không khác gì so với việc tạo một cái. Nhấp vào nút Chỉnh sửa và cập nhật giá trị và mô tả theo ý muốn.
Giới hạn
Các giá trị cấu hình có các giới hạn sau theo loại.
| Loại | Kích thước tối đa |
|---|---|
| Chuỗi | 100.000 ký tự |
| Số | ±1.7976931348623157e+308, ±2^53 cho các biểu diễn số nguyên chính xác |
| Boolean | N/A |
| JSON | 100.000 ký tự |
Xuất bản cấu hình
Sau khi bạn tạo một cấu hình, nó chuyển sang trạng thái đang chờ để bạn có thể thử nghiệm trước khi nó trở nên công khai. Các thay đổi đang chờ có sẵn cho bạn và nhóm của bạn trong các phiên chơi Studio, không cho người chơi trong các trải nghiệm trực tiếp. Trang Cấu hình trên Creator Hub hiển thị tất cả các thay đổi đang hoạt động và đang chờ.

- Sau khi bạn thử nghiệm các thay đổi đang chờ của mình, nhấp vào Xuất bản ngay để xuất bản cho tất cả người chơi gần như ngay lập tức (khoảng từ 15 giây đến 1 phút). Bạn cũng có thể chọn Xuất bản trong 15 phút nếu bạn thích một khoảng thời gian phát hành dài hơn, dần dần. Trong một số trường hợp, khách hàng có thể mất vài phút để phản ánh các thay đổi sau khi xuất bản.
- (Khuyến nghị) Thêm một thông điệp xuất bản mô tả cho biết bạn đã cập nhật gì. Thông điệp này xuất hiện trên trang Lịch sử và có thể giúp bạn và nhóm của bạn sau này xác định mục đích của thay đổi.
Nhắm cấu hình đến người chơi cụ thể
Theo mặc định, một cấu hình cung cấp cùng một giá trị cho mọi người. Cấu hình điều kiện cho phép bạn cung cấp các giá trị khác nhau cho các người chơi khác nhau dựa trên các thuộc tính của người chơi (quốc gia, thời gian tham gia, ngôn ngữ, trạng thái người trả tiền, v.v.).
Cấu hình điều kiện có ba phần xác định giá trị mà một người chơi nhận được:
- Quy tắc điều kiện xác định ai phù hợp. Mỗi quy tắc là một biểu thức logic, chẳng hạn như "người trả tiền hoạt động trong 30 ngày đầu tiên", đánh giá các thuộc tính của người chơi.
- Thứ tự quy tắc xác định cách chọn khi một người chơi phù hợp với nhiều quy tắc. Roblox đánh giá các quy tắc từ trên xuống dưới và áp dụng nhánh phù hợp đầu tiên. Các quy tắc được sắp xếp toàn cầu, bất kể thứ tự mà bạn thêm các giá trị điều kiện vào một khóa cá nhân.
- Giá trị điều kiện xác định những gì một người chơi phù hợp nhận được. Đối với mỗi điều kiện, bạn gán một giá trị. Nếu một người chơi phù hợp với một quy tắc trong điều kiện đó, họ nhận được giá trị liên quan; nếu không, họ nhận được giá trị mặc định của cấu hình.
Các thuộc tính được hỗ trợ
Cấu hình điều kiện hỗ trợ các thuộc tính sau. Các thuộc tính này chia sẻ cùng một định nghĩa như các bộ lọc và phân tích tương đương trong các bảng điều khiển phân tích.
| Thuộc tính | Mô tả |
|---|---|
| Quốc gia | Vị trí địa lý của người chơi. |
| Ngôn ngữ | Cài đặt ngôn ngữ của người chơi. |
| Mới vs quay lại | Liệu người chơi đang chơi trải nghiệm của bạn lần đầu tiên hay đã chơi trước đó. |
| Nguồn | Cách người chơi tìm thấy trải nghiệm của bạn, chẳng hạn như một gợi ý trên trang chính, tìm kiếm, hoặc một quảng cáo tài trợ. |
| Khi người dùng lần đầu chơi | Bao lâu trước người chơi lần đầu chơi trải nghiệm của bạn, chẳng hạn như 0-30 ngày trước hoặc 31-90 ngày trước. Tính toán hàng ngày. |
| Trạng thái người trả tiền hoạt động trong trải nghiệm | Hoạt động thanh toán của người chơi trong trải nghiệm của bạn, cho phép bạn nhắm mục tiêu các phân khúc khác nhau của người dùng trả tiền. Tính toán hàng ngày. |
| Trạng thái hoạt động trong trải nghiệm | Gần đây người chơi đã chơi trải nghiệm của bạn, cho phép bạn đối xử với người chơi mới, hoạt động, đã ngừng và đã tái kích hoạt khác nhau. Tính toán hàng ngày. |
| Sự tham gia của người dùng | Mức độ người chơi chơi trải nghiệm của bạn mỗi tuần, cho phép bạn tách biệt những người chơi tham gia nhất với những người chơi bình thường hơn. Tính toán hàng ngày. |
| Trạng thái người chi tiêu trên nền tảng | Liệu người chơi có phải là người chi tiêu hoạt động trên toàn nền tảng Roblox hay không. Tính toán hàng ngày. |
| Trạng thái hoạt động trên nền tảng | Gần đây người chơi đã chơi ở bất kỳ đâu trên Roblox, thay vì chỉ trong trải nghiệm của bạn. Tính toán hàng ngày. |
Tạo giá trị điều kiện
Bạn thêm các điều kiện khi bạn tạo hoặc chỉnh sửa một cấu hình. Ở bước Thêm nhắm mục tiêu, thêm một điều kiện:
- Chọn một điều kiện hiện có hoặc nhấp vào Tạo một cái mới.
- Thêm một hoặc nhiều quy tắc.
- Đặt giá trị mà người chơi phù hợp nhận được.
Ví dụ, để cung cấp một trải nghiệm khó hơn cho những người trả tiền hoạt động hàng đầu đã bắt đầu chơi trong 30 ngày qua, bạn có thể tăng giá trị dynamicBossHealth của họ.

Truy cập các giá trị nhắm mục tiêu trong mã
Để lấy các giá trị nhắm mục tiêu, sử dụng ConfigService:GetConfigForPlayerAsync(), điều này đánh giá các quy tắc và thứ tự cho một người chơi cá nhân. ConfigService:GetConfigAsync() không áp dụng nhắm mục tiêu vì nó không cụ thể cho một người chơi duy nhất. Để biết thêm thông tin, xem Thêm cấu hình vào mã của bạn.
Thực hành tốt nhất và giới hạn
- Mỗi giá trị điều kiện phải phù hợp với kiểu dữ liệu (boolean, chuỗi, số, hoặc JSON) của giá trị mặc định của cấu hình.
- Bạn có thể có tối đa 100 điều kiện cho mỗi trò chơi.
- Mỗi khóa cấu hình hỗ trợ tối đa 20 điều kiện.
- Xác minh thứ tự quy tắc trước khi bạn xuất bản. Bởi vì các quy tắc được sắp xếp toàn cầu, hãy xác nhận rằng thứ tự đánh giá của bạn được ưu tiên đúng cách. Để xem lại thứ tự, nhấp vào tab Điều kiện.
Tạo và chỉnh sửa cấu hình trong Studio
Nếu bạn thích, bạn có thể tạo, chỉnh sửa, giai đoạn và xuất bản các cấu hình trong Roblox Studio. Nhấp vào Tệp > Mở Cấu hình để mở widget. Giao diện Studio đặc biệt thuận tiện cho việc giai đoạn và thử nghiệm các giá trị mới.

Xuất bản cấu hình đến một trải nghiệm khác
Trong Studio, bạn có thể xuất bản các cấu hình của mình đến một trải nghiệm khác, điều này hoàn toàn ghi đè các cấu hình cho trải nghiệm đó. Điều này có thể đặc biệt hữu ích cho việc đồng bộ hóa các cấu hình từ một trải nghiệm giai đoạn hoặc phát triển đến trải nghiệm trực tiếp.
Trong Roblox Studio, đi đến menu trên cùng và chọn Tệp > Mở Cấu hình.
Trong tab Đã xuất bản của widget Cấu hình, nhấp vào biểu tượng ⋮ và chọn Xuất bản Như.

Trong hộp thoại xuất hiện, tìm và chọn trải nghiệm mục tiêu từ danh sách các nhóm mà bạn có quyền chỉnh sửa.

Xem lịch sử và khôi phục cấu hình
Trên trang Cấu hình, nhấp vào Lịch sử để xem các cập nhật trước đó. Mỗi cập nhật có thời gian và ngày của thay đổi, ai đã thực hiện thay đổi, và thông điệp xuất bản.

- Mở rộng mỗi hàng để xem khóa, giá trị trước khi thay đổi, và giá trị sau đó.
- Sử dụng hộp Tìm kiếm Khóa để tìm kiếm các khóa - không phải mô tả hoặc giá trị, chỉ các khóa.
Trang Lịch sử cũng cho phép bạn khôi phục các cấu hình về trạng thái trước đó:
- Nhấp vào Khôi phục bên cạnh thay đổi để giai đoạn giá trị "trước". Lưu ý rằng việc khôi phục một cấu hình sẽ loại bỏ bất kỳ thay đổi đang chờ nào hiện có.
- Quay lại trang Cấu hình và xuất bản cấu hình.
Thêm cấu hình vào mã của bạn
Lớp chính để làm việc với các cấu hình là ConfigService, lớp này lấy các khóa và giá trị mới nhất cho trải nghiệm của bạn. ConfigService chỉ có sẵn cho các kịch bản máy chủ. Cố gắng gọi các phương thức của nó từ một kịch bản khách hàng sẽ dẫn đến một lỗi.
Bước đầu tiên để làm việc với các cấu hình là lấy một ConfigSnapshot, các giá trị mới nhất cho tất cả các cấu hình tại thời điểm hiện tại. Có hai phương thức để lấy một snapshot:
ConfigService:GetConfigAsync() dành cho các cấu hình toàn cầu mà bạn muốn áp dụng cho tất cả người chơi trong trải nghiệm:
local ConfigService = game:GetService("ConfigService")local configSnapshot = ConfigService:GetConfigAsync()local bossHealth = configSnapshot:GetValue("bossHealth")ConfigService:GetConfigForPlayerAsync() lấy các cấu hình cụ thể cho người chơi để các người chơi khác nhau có thể nhận được các giá trị khác nhau. Sử dụng nó cho cấu hình điều kiện và thí nghiệm.
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)
Trong cả hai trường hợp, nếu khóa không tồn tại, ConfigSnapshot:GetValue() sẽ trả về nil.
Tự động hoàn thành
Các cấu hình được tích hợp vào tính năng tự động hoàn thành của Trình chỉnh sửa Kịch bản. Khi bạn gọi ConfigSnapshot:GetValue(), trình chỉnh sửa sẽ gợi ý tên khóa cấu hình của bạn và hiển thị loại của mỗi cấu hình khi bạn di chuột qua tên biến.
Nếu kịch bản của bạn sử dụng chế độ --!strict, trình kiểm tra có thể phát hiện và xác minh kiểu cho bạn.
Tự động hoàn thành cũng hoạt động với các cấu hình sử dụng các loại JSON lồng ghép phức tạp.
Làm mới các snapshot
ConfigSnapshots đại diện cho một thời điểm, trạng thái của cấu hình khi bạn yêu cầu snapshot. Để tránh làm gián đoạn gameplay, các cập nhật cho một cấu hình không tự động lan truyền đến các snapshot. Trong một trò chơi bắn súng cạnh tranh, ví dụ, bạn có thể chỉ muốn các giá trị cấu hình mới giữa các vòng để các thuộc tính vũ khí không dao động giữa trận đấu.
Để lấy các giá trị mới nhất một cách thủ công, sử dụng phương thức ConfigSnapshot:Refresh(). Tùy chọn, kết nối một hàm với sự kiện ConfigSnapshot.UpdateAvailable để tự động làm mới:
configSnapshot.UpdateAvailable:Connect(function()
configSnapshot:Refresh()
end)Sau khi bạn làm mới một snapshot, bạn có thể sử dụng ConfigSnapshot:GetValueChangedSignal() để lắng nghe các thay đổi đối với một khóa cụ thể để bạn có thể cập nhật mã của trải nghiệm:
configSnapshot:GetValueChangedSignal("bossHealth"):Connect(function(newHealthValue)
spawnNewBoss(newHealthValue)
end)Xử lý lỗi
Trong những trường hợp hiếm hoi khi cấu hình không tải được và chưa bao giờ được tải trước đó, ConfigService:GetConfigAsync() sẽ ném ra một lỗi.
Nếu ConfigService mất kết nối với các máy chủ Roblox sau khi nó đã được tải trước đó, ConfigService:GetConfigAsync() sẽ trả về một snapshot với các giá trị mới nhất có sẵn. Những snapshot này cố gắng kết nối lại và kích hoạt sự kiện UpdateAvailable khi chúng tải thành công các cập nhật mới.
Cách bạn xử lý những tình huống không phổ biến này là tùy thuộc vào bạn. Bạn có thể bọc cuộc gọi trong một pcall() và có các giá trị dự phòng trong mã của bạn, hiển thị cho người chơi một lỗi và chờ snapshot kết nối lại, hoặc một giải pháp khác.
Thử nghiệm cấu hình
ConfigService có các phương thức tích hợp để thử nghiệm tạm thời các thay đổi cấu hình cả trong Studio và trên các máy chủ trực tiếp mà không ảnh hưởng đến toàn bộ trải nghiệm.
Để đặt một giá trị thử nghiệm cục bộ, gọi ConfigService:SetTestingValue() từ một kịch bản máy chủ hoặc thông qua Bảng điều khiển Nhà phát triển. Các thay đổi đối với các giá trị thử nghiệm kích hoạt một cập nhật cấu hình cùng với tín hiệu ConfigSnapshot.UpdateAvailable. Giống như một bản cập nhật sản xuất, bạn phải làm mới các snapshot hiện có để nhận được giá trị thử nghiệm:
local ConfigService = game:GetService("ConfigService")
ConfigService:SetTestingValue("bossHealth", 200)
local configSnapshot = ConfigService:GetConfigAsync()
local bossHealth = configSnapshot:GetValue("bossHealth") -- Bây giờ là 200!Các thay đổi thử nghiệm áp dụng cho thời gian sống của máy chủ hiện tại và không lan truyền đến các máy chủ khác. Trong Studio, chúng áp dụng cho phiên chơi hiện tại và không ảnh hưởng đến các máy chủ trực tiếp. Bạn có thể xóa các thay đổi thử nghiệm một cách thủ công bằng ConfigService:ClearTestingValue().