Trong các hướng dẫn trước đó, bạn đã tạo ra một loạt các tính năng kinh nghiệm bao gồm các平台 mờ dần và dịch lava độc hại . This tutorial kết hợp các tính năng này thành một trải nghiệm có thể chơi ở đó người dùng thấy ai có thể sống s
Cài đặt
Đầu tiên, bạn sẽ cần phải cài đặt cảnh cho trải nghiệm của bạn. Duplicate the fading platforms bạn đã tạo trong hướng dẫn trước và cho phép người dùng cạnh tranh để ở lại bảng của các nền tảng lâu nhất có thể.
Bạn cũng có thể sử dụng lava độc ác để giết người dùng khi họ rơi khỏi các nền tảng, hoặc chỉ để chúng rơi vào cảnh tàn tật của họ. Đảm bảo bạn đặt một SpawnLocation ở đâu đó mà người dùng có thể nhảy vào các nền tảng để bắt đầ
Điểm người chơi
Roblox có một bảng xếp hạng tích hợp để hiển thị thống kê người dùng. Khi bạn thiết lập điểm người chơi qua bảng xếp hạng, chúng sẽ xuất hiện ở phía bên phải của màn hình trong trải nghiệm.
Bạn sẽ học thêm cách tùy chỉnh thông tin trong các hướng dẫn sau đó, nhưng bảng xếp hạng là cách đơn giản nhất để tạo ra một hệ thống đánh giá có thể nhìn thấy trong Roblox.
Tốt nhất là đặt các script thiết lập trạng thái kinh nghiệm vào ServerScriptService vì chúng sẽ tự động chạy khi trải nghiệm bắt đầu. Trong ServerScriptService , tạo một script tên là SetupPoints .
Lắng nghe cho Người chơi
Trong Roblox, một dịch vụ là một đối tượng thực hiện một loạt các chức năng hữu ích. Dịch vụ Players có một sự kiện tên là PlayerAdded mà bạn có thể sử dụng để cài đặt điểm cho mỗi người tham gia trải
Bạn có thể truy cập các dịch vụ bằng cách sử dụng chức năng GetService trong đối tượng game của bạn. game là một biến đổi truy cập từ bất kỳ nơi nào có chứa tất cả trong trải nghiệm của bạ
Tạo một biến cho dịch vụ Người chơi bằng cách sử dụng game:GetService("Players") .
Tạo một chức năng tên là onPlayerAdded với một biến để người chơi đang đến.
Kết nối hàm onPlayerAdded vào sự kiện PlayerAdded.
local Players = game:GetService("Players")local function onPlayerAdded(player)endPlayers.PlayerAdded:Connect(onPlayerAdded)
Tạo một thư mục Chỉ số
Để làm cho điểm của người dùng hiển thị trên bảng xếp hạng, tất cả những gì bạn cần làm là tạo một Folder mới trong đối tượng Player của họ có tên là "leaderstats" và đặt
Tạo một đối tượng mới Folder bằng cách sử dụng Instance.new("Folder") , lưu kết quả trong một biến mới có tên là leaderstats .
local function onPlayerAdded(player)local leaderstats = Instance.new("Folder")endĐặt tên thuộc tính của leaderstats để "leaderstats" .
Parent leaderstats đến player.
local Players = game:GetService("Players")local function onPlayerAdded(player)local leaderstats = Instance.new("Folder")leaderstats.Name = "leaderstats"leaderstats.Parent = playerendPlayers.PlayerAdded:Connect(onPlayerAdded)
Tạo Các Điểm
Hệ thống xếp hạng đọc bất kỳ giá trị nào trong thư mục leaderstats và hiển thị bất kỳ thứ gì nó tìm thấy.
Để thêm một biến nhất định sẽ theo dõi điểm của một người chơi, một đối tượng mới IntValue có thể được gắn vào thư mục leaderstats. Tên của đối tượng giá trị sẽ được hiển thị bên cạnh giá trị hiện tại của nó.
- Đặt Name để "Points" .
- Đặt Value để 0 ; đây là những gì bảng xếp hạng sẽ hiển thị ban đầu cho người chơi.
- Làm cha đối tượng points đến thư mục leaderstats .
local Players = game:GetService("Players")
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
end
Players.PlayerAdded:Connect(onPlayerAdded)
Thử nghiệm trải nghiệm của bạn và bạn nên thấy bảng xếp hạng xuất hiện ở phía trên cùng bên phải với tên người dùng của bạn và một điểm số đi kèm.
Đếm Thời Gian
Mỗi người dùng nên kiếm được một điểm cho mỗi giây họ sống. Một while vòng và task.wait() chức năng có thể được sử dụng để cập nhật giá trị của các điểm mỗi giây.
- Ở cuối script, tạo một while lặp với true như điều kiện.
- Trong vòng lặp, task.wait() cho 1 giây.
Players.PlayerAdded:Connect(onPlayerAdded)while true dotask.wait(1)end
Danh Sách Người Chơi
Để chạy mã cho mọi người trong trải nghiệm, bạn cần phải lặp qua <a href="/reference/engine/databases">mảng</a> của người dùng được trả lại bởi hàm <a href="/reference/engine/databases">Class.Players:GetPlayers()|GetPlayers</a>.
Một mat阵 là một danh sách các mục được lưu trong theo thứ tự. Mỗi mục có thể được truy cập bởi vị trí 索引 của nó, bắt đầu từ 1 . Bạn có thể nhận được chiều dài của một mat阵 bằng cách kết hợp nó với # .
- Lưu kết quả của Players:GetPlayers() trong một biến playerList .
- Tạo một for vòng với giá trị khởi đầu là 1 và giá trị cuối cùng là #playerList , so that you get one iteration of the vòng per người chơi.
while true dotask.wait(1)local playerList = Players:GetPlayers()for currentPlayer = 1, #playerList do-- Thêm logic của bạn ở đây cho mỗi người chơi trong playerListendend
Điều kiện để nhận
Để trao một điểm cho mỗi người dùng trong for loop, bạn sẽ cần phải lấy người dùng ra khỏi danh sách người dùng và thêm 1 vào đối tượng Điểm lưu trong thư mục của họ.
Các đối tượng lưu trong một bảng được truy cập bằng cách sử dụng dấu chéo vuông - ví ví dụ / trường hợp, món đồ đầu tiên trong bảng playerList có thể được truy cập bằng cách sử dụng playerList[1] . Nếu b
- Lưu người dùng ở playerList[currentPlayer] trong một biến đổi tên là player .
- Lưu đối tượng Điểm của người dùng trong biến points .
while true dotask.wait(1)local playerList = Players:GetPlayers()for currentPlayer = 1, #playerList dolocal player = playerList[currentPlayer]local points = player.leaderstats.Pointspoints.Value += 1endend
Thử nghiệm trải nghiệm của bạn và bạn nên thấy rằng bảng xếp hạng hiển thị số điểm của người chơi của bạn tăng lên bởi 1 mỗi giây.
Lắng nghe nhân vật
Mục tiêu của trải nghiệm là xem ai có thể sống sót lâu nhất, vì vậy người dùng bị mất sẽ cần phải có điểm của họ đặt lại thành 0.
Bạn sẽ cần nhận mô hình Nhân vật cho người dùng để xác định khi họ đã chết. Mô hình này chỉ được thêm vào trải nghiệm sau k
local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
end
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
Mặc dù bạn đã bao gồm người dùng trong các thông số của chức năng onCharacterAdded, thực tế sự kiện CharacterAdded chỉ trả lại nhân vật, không phải người dùng được liên kết. Để truyền đối tượng người chơi
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
player.CharacterAdded:Connect(function(character)
onCharacterAdded(character, player)
end)
end
Điểm thiết lập
Khi một người chết, họ sẽ tự động Humanoid một sự kiện Died. Bạn có thể sử dụng sự kiện này để xác định khi nào để thiết lập lại điểm của họ.
Hình người được tìm thấy bên trong mô hình Nhân vật, nhưng nội dung của mô hình đó chỉ được tập hợp khi người dùng tạo ra. Để làm cho mã của bạn an toàn chờ đợi đối t
local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
local humanoid = character:WaitForChild("Humanoid")
end
Hành động bạn cần phải kết nối với sự kiện Died rất ngắn và sẽ chỉ bao gồm ở đây, vì vậy bạn có thể sử dụng một hành động anonim một lần nữa.
- Kết nối một chức năng mới cho ẩn Died trên Humanoid.
- Trong hàm chức anonim, tạo một biến đổi tên là points cho đối tượng Điểm của người chơi.
local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
local humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
local points = player.leaderstats.Points
points.Value = 0
end)
end
Thử này và bạn sẽ thấy điểm số của người dùng được đặt lại khi họ chết.
Kiểm tra Người Chơi
Nếu người dùng vẫn kiếm được điểm ngay cả khi chết, nó thực sự không đến trong tâm hồn của trải nghiệm, vì vậy mã cần kiểm tra xem người dùng có sống hay không trước khi đưa ra một điểm.
Bạn cần phải bắt đầu bằng cách định nghĩa một thuộc tính trong onPlayerAdded hành động mà có thể được sử dụng để kiểm tra có phải người dùng đang sống không. Tại thời điểm này, người dùng vẫn chưa sống và đã gọi xe, vì họ v�
Các thuộc tính cho phép bạn tùy chỉnh các thể đối tượng trong Roblox với dữ liệu của riêng bạn. Một thuộc tính bao gồm tên và giá trị. Bạn có thể tạ
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
player:SetAttribute("IsAlive", false)
player.CharacterAdded:Connect(function(character)
onCharacterAdded(character, player)
end)
end
Khi mô hình nhân vật của người dùng được tái sinh, giá trị của IsAlive cần được thay đổi thành true để người dùng có thể bắt đầu kiếm điểm mới.
- Trong onCharacterAdded, đặt IsAlive đặc tính của player đến 1> true1> .
- Trong onCharacterDied, đặt IsAlive đặc tính của player đến 1> false1> .
local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
player:SetAttribute("IsAlive", true)
local humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
local points = player.leaderstats.Points
points.Value = 0
player:SetAttribute("IsAlive", false)
end)
end
Cuối cùng, IsAlive nên được kiểm tra trước khi bất kỳ điểm nào được cấp trong chuỗi while tại cuố
while true dotask.wait(1)local playerList = Players:GetPlayers()for currentPlayer = 1, #playerList dolocal player = playerList[currentPlayer]if player:GetAttribute("IsAlive") thenlocal points = player.leaderstats.Pointspoints.Value += 1endendend
Thử nghiệm trải nghiệm của bạn ngay bây giờ và bạn nên tìm thấy người dùng kiếm điểm mỗi giây khi họ đang sống, và ở lại 0 khi họ không sống. Khi bạn có bạn bè chơi với bạn và xem ai có thể có điểm cao nhất.
Đây chỉ là khởi bắt đầu: bạn có thể tiếp tục cải thiện trải nghiệm của bạn cho người dùng của bạn. Dưới đây là một số mẹo:
- Đặt mã cho tất cả các nền tảng trong một tập tin duy nhất, dễ dàng hơn để cập nhật.
- Tạo một khu vực lobi cho người dùng để chờ đợi để được dịch chuyển đến khu vực kinh nghiệm, cho phép người dùng bắt đầu ngay lập tức.
- Thông báo người chiến thắng của mỗi vòng.
Mã cuối cùng
local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
player:SetAttribute("IsAlive", true)
local humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
local points = player.leaderstats.Points
points.Value = 0
player:SetAttribute("IsAlive", false)
end)
end
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
player:SetAttribute("IsAlive", false)
player.CharacterAdded:Connect(function(character)
onCharacterAdded(character, player)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
while true do
task.wait(1)
local playerList = Players:GetPlayers()
for i = 1, #playerList do
local player = playerList[i]
if player:GetAttribute("IsAlive") then
local points = player.leaderstats.Points
points.Value += 1
end
end
end