Tạo nguy hiểm 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.


Các đối tượng nguy hiểm giảm sức khỏe của người chơi khi chúng chạm vào chúng.Làm điểm khởi đầu đơn giản, phần này của hướng dẫn dạy bạn cách tạo một phần lớn vô hình ở cùng mức độ với nước trong trải nghiệm của bạn, để rơi vào nguy hiểm thay đổi sức khỏe của người chơi thành không và hồi sinh họ trở lại điểm bắt đầu của trải nghiệm.

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

Để tạo nguy cơ nước cơ bản:

  1. Trong cửa sổ Explorer , thêm một thư mục mới vào thư mục Thế giới , sau đó đổi tên thành Nguy hiểm .Hãy chắc chắn rằng tên được viết chính xác với chữ viết hoa chính xác, nếu không thì mã sẽ không hoạt động.

  2. Trong thư mục Nguy hiểm , hãy chèn một phần khối và đổi tên thành Nguy hiểm .

    Studio's Explorer window with the Hazard block Part highlighted under the Hazards folder.
  3. Di chuyển và thay đổi quy mô phần để bao phủ đường nước xung quanh hòn đảo và nền tảng.Ví dụ, bộ trải nghiệm mẫu Nhảy hòn đảo - Lập trình có bộ Kích thước đến 825, 1, 576CFrame.Position đến 174, -6.5, 38 .

    A far out view of all of the cylinder sea stacks and the island. A large block part covers the water where a player could land if they fell from a sea stack.
  4. Chọn phần, sau đó trong cửa sổ Tính năng , hãy cấu hình các thuộc tính sau để nguy hiểm trở nên vô hình và người chơi có thể đi qua nó:

    • Chỉnh Độ trong suốt thành . Điều này làm cho mối nguy hiểm trở nên vô hình, do đó nước thực tế có vẻ là mối nguy hiểm.
    • Vô hiệu hóa CanCollide .Điều này cho thấy động cơ rằng các bộ phận khác có thể đi qua nguy hiểm mà không bị gián đoạn, có nghĩa là người chơi có thể rơi vào nguy hiểm.
    • Bật Ghim .Điều này cho thấy động cơ không bao giờ thay đổi vị trí của mối nguy hiểm do bất kỳ mô phỏng liên quan đến vật lý nào, có nghĩa là người chơi có thể chạm vào mối nguy hiểm mà không ảnh hưởng đến vị trí của nó.
  5. Tạo một Tập lệnh trong ServerScriptService , sau đó đổi tên thành Dịch vụ Hazard .

  6. Thay thế mã mặc định bằng mã sau:


    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

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

    Cảm thấy tự do để thay đổi, thêm hoặc xóa các đối tượng nguy hiểm trong trải nghiệm của bạn để tạo ra chướng ngại vật độc đáo.Miễn là chúng được chứa trong thư mục Nguy hiểm , vòng lặp mã kết nối bộ xử lý sự kiện với tất cả các nguy hiểm của bạn.

Kết nối với chu kỳ cuộc sống 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ải nghiệm của bạn, chẳng hạn như tham gia, rời khỏi hoặc hồi sinh.Bạn cần kết nối các xử lý viên với các sự kiện này để thực hiện logic thích hợp cho mỗi sự kiện chính vòng đời.Trong kịch bản CoinService , sao chép và dán mã sau đây vào phía dưới cùng của kịch bản:


local function onPlayerAdded(player)
-- Đặt lại tiền xu người chơi về 0
updatePlayerCoins(player, function(_)
return 0
end)
player.CharacterAdded:Connect(function(character)
-- WaitForChild sẽ ngừng vòng lặp người chơi, vì vậy dưới đây nên được thực hiện trong một tiến trình riêng biệt
task.spawn(function()
-- Khi một người chơi chết
character:WaitForChild("Humanoid").Died:Connect(function()
-- Đặt lại tiền xu 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 được 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 chức năng để đặt lại số lượng tiền xu trong các sự kiện chu kỳ thích hợp:

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

Thử nghiệm

Đã đến lúc xem xem nếu mối nguy hiểm của người chơi hoạt động như dự định. Khi bạn chạm vào nước, nhân vật của bạn nên chết và mất tiền của họ. Để kiểm tra trò chơi của bạn:

  1. Trong thanh công cụ, nhấp vào nút Chơi . Studio bước vào chế độ thử nghiệm.

    Play button highlighted in Studio's playtesting options.
  2. Di chuyển nhân vật của bạn để thu thập một số tiền xu, sau đó nhảy vào nước.Nếu các kịch bản của bạn hoạt động đúng cách, nhân vật của bạn chết, và số tiền xu trên bảng xếp hạng được đặt lại thành 0 .