Tạo mối nguy cho người chơi

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.


Hiện tại, người chơi có thể rơi xuống bất kỳ nền tảng nào mà không có hậu quả. Phần này hướng dẫn bạn tạo một mối nguy lớn vô hình ở cùng độ cao với mặt nước trong trò chơi của bạn. Khi một người chơi rơi vào mối nguy, sức khỏe của họ sẽ giảm xuống bằng không và họ sẽ hồi sinh tại điểm bắt đầu của trò chơi.

Tạo một mối nguy nước cơ bản

Tạo một mối nguy nước cơ bản

Trong Workspace > World, tạo một thư mục mới có tên là Hazards.
Trong thư mục Hazards, tạo một Part khối tên là Hazard với Size 825, 1, 576 và CFrame.Position 174, -6.5, 38 để khối phủ lên mặt nước xung quanh hòn đảo và các nền tảng.
Đặt Transparency thành 1 để khối trở nên vô hình và nước thực tế xuất hiện như là mối nguy, tắt CanCollide để người chơi rơi qua nó vào nước, và bật Anchored để vật lý không di chuyển nó.

Phát hiện khi người chơi chạm vào mối nguy

Mối nguy không làm gì cả cho đến khi bạn viết một script lắng nghe Touched và giảm sức khỏe của người chơi xuống bằng không.

Tạo HazardService

Trong ServerScriptService, tạo một Script tên là HazardService với mã sau:
```lua
local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local hazardsFolder = Workspace.World.Hazards
local hazards = hazardsFolder:GetChildren()
local function onHazardTouched(otherPart)
local character = otherPart.Parent
local player = Players:GetPlayerFromCharacter(character)
if player then
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid then
humanoid.Health = 0
end
end
end
for _, hazard in hazards do
hazard.Touched:Connect(onHazardTouched)
end
```

HazardService có nhiều điểm tương đồng với CoinService. Tuy nhiên, thay vì thu thập một đồng xu, người chơi sẽ có sức khỏe được đặt thành 0 khi họ chạm vào một mối nguy.

Hãy thoải mái sửa đổi, thêm hoặc xóa các đối tượng mối nguy trong trò chơi của bạn để tạo ra những trở ngại độc đáo. Miễn là chúng được chứa trong thư mục Hazards, vòng lặp mã kết nối trình xử lý sự kiện với tất cả các mối nguy của bạn.

Kết nối với vòng đời của người chơi

Vòng đời của người chơi đại diện cho các sự kiện xảy ra khi người chơi tương tác trong trò chơi của bạn, chẳng hạn như tham gia, rời đi hoặc hồi sinh. Bạn cần kết nối các trình xử lý với những sự kiện này để thực hiện logic cho mỗi sự kiện vòng đời chính.

Thêm trình xử lý vòng đời vào CoinService

Trong ServerScriptService, thêm đoạn mã sau vào cuối Script CoinService hiện có (đừng thay thế bất kỳ mã hiện có nào — hãy thêm cái này sau nó):
```lua
local function onPlayerAdded(player)
-- Đặt lại đồng xu của người chơi về 0
updatePlayerCoins(player, function(_)
return 0
end)
player.CharacterAdded:Connect(function(character)
-- WaitForChild sẽ dừng vòng lặp của người chơi, vì vậy bên dưới nên được thực hiện trong một luồng riêng
task.spawn(function()
-- Khi một người chơi chết
character:WaitForChild("Humanoid").Died:Connect(function()
-- Đặt lại đồng xu của người chơi về 0
updatePlayerCoins(player, function(_)
return 0
end)
end)
end)
end)
end
-- Khởi tạo bất kỳ người chơi nào đã thêm trước khi kết nối với sự kiện PlayerAdded
for _, player in Players:GetPlayers() do
onPlayerAdded(player)
end
local function onPlayerRemoved(player)
updatePlayerCoins(player, function(_)
return nil
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
Players.PlayerRemoving:Connect(onPlayerRemoved)
```

Mã định nghĩa các hàm để đặt lại số lượng đồng xu trong các sự kiện vòng đời thích hợp:

  • Players.PlayerAdded được kích hoạt khi một người chơi tham gia trò chơi và đặt số lượng đồng xu thành 0.
  • Player.CharacterAdded được kích hoạt khi mô hình nhân vật của người chơi được thêm vào thế giới. Nó xảy ra sau PlayerAdded và bất cứ khi nào người chơi hồi sinh.
  • Humanoid.Died được kích hoạt khi một người chơi chết, và đặt số lượng đồng xu thành 0. task.spawn() tạo ra một luồng riêng để xử lý điều này, để các khía cạnh khác của vòng đời người chơi có thể thực thi.
  • Player.PlayerRemoved được kích hoạt khi một người chơi rời khỏi trò chơi để dọn dẹp trạng thái của người chơi.
  • Mã này chứa một vấn đề tiềm ẩn khi người chơi có thể thu thập đồng xu trước khi sự kiện Players.PlayerAdded thực thi và sau đó số lượng đồng xu của họ được đặt lại về không. Để giảm thiểu vấn đề này, hãy xem xét các giải pháp như lập lịch mã hoặc đóng băng nhân vật của người chơi cho đến khi khởi tạo kết thúc. Tuy nhiên, các giải pháp này liên quan đến những khái niệm lập trình phức tạp hơn nằm ngoài phạm vi của hướng dẫn này.

Kiểm tra trò chơi

Chọn Test từ menu thả xuống và nhấp Play. Thu thập một vài đồng xu, sau đó nhảy xuống nước. Nhân vật của bạn nên chết và hồi sinh tại điểm bắt đầu, với số lượng đồng xu được đặt lại thành 0.

©2026 Roblox Corporation. Roblox, logo Roblox và Powering Imagination là các nhãn hiệu đã đăng ký và chưa đăng ký của chúng tôi tại Hoa Kỳ và các quốc gia khác.