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


Những thiết bị nguy hiểm giảm sức khỏe của người chơi khi chạm vào chúng. Là một điểm xuất phát đơn giản, bài hướng dẫn này của hướng dẫn cho bạn cách tạo ra một phần lớn vô hình ở cùng mức độ như nước trong trải nghiệm của bạn

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

Để tạo ra 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 World , sau đó đổi tên nó thành Hazards . Hãy đảm bảo tên được viết đúng với chữ viết hoa chính xác, không đổi tên nó thì mã sẽ không hoạt động.

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

    Studio's Explorer window with the Hazard block Part highlighted under the Hazards folder.
  3. Di chuyển và thay đổi kích thước của bộ phận để tغطy dòng nước xung quanh hòn đảo và các nền tảng. Ví dụ, trải nghiệm Island Jump - Scripting trên hòn đảo 825, 1, 576 và

    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 bộ phận, sau đó trong cửa sổ Tính chất , hãy cấu hình các thuộc tính sau đây để mối nguy hiểm là vô hình, và người chơi có thể vượt qua nó một cách an toàn:

    • Đặt Độ trong suốt lên 1 . Điều này làm cho nguy hiểm trở nên vô hình, so dass nước thực sự xuất hiện như nguy hiểm.
    • Vô hiệu hóa CanCollide . Điều này choEngine biết rằng các bộ phận khác có thể vượt qua nguy hiểm mà không bị ảnh hưởng, có nghĩa là người chơi có thể rơi qua nguy hiểm.
    • Bật Cố định . Điều này cho phép máy chủ 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ý, 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 Script trong ServerScriptService , sau đó đổi tên nó thành HazardService .

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


    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

    Các dịch vụ nguy hiểm có nhiều điểm tương đồng với dịch vụ tiền tệ . Tuy nhiên, thay vì thu thập một xu, người chơi có sức khỏe của họ đặt ở 0 khi họ chạm vào một nguy hiểm.

    Cảm thấy thoải mái để điều chỉnh, thêm hoặc xóa các thiết bị nguy hiểm trong trải nghiệm của bạn để tạo ra những rào chắn độc đáo. Mặc dù chúng được đựng trong thư mục Nguy hiểm , thì mã lược kết nối người xử lý sự kiện với tất cả các nguy hiểm của b

Kết Nối với Người Chơi

Chu kỳ của người chơi diễn tải các sự kiện xảy ra khi người chơi tương tác trong kinh nghiệm của bạn, chẳng hạn như tham gia, rời đi hoặc respawn. Bạn cần kết nối các hành động đến các sự kiện này để thi hành đúng cách cho mỗi sự kiện lớ


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

  • Player.PlayerAdded bắt đầu khi một người chơi tham gia vào trải nghiệm, và đặt số tiền xu thành 0 .
  • Player.CharacterAdded bắt đầu khi mô hình nhân vật của một người được thêm vào thế giới. Nó xảy ra sau khi PlayerAdded và mỗi khi người chơi respawn.
  • Humanoid.Died bắt đầu khi một người chơi chết, và đặt số tiền xu lên 0 . task.spawn() tạo một luồng chủ đề riêng cho xử lý điều này, so other aspects of the player life cycle can execute.
  • Player.PlayerRemoved những 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 chứa một vấn đề tiềm năng mà người chơi có thể thu thập xu trước khi sự kiện Players.PlayerAdded được thực hiện và sau đó có thể có số đếm xu của họ được đặt lại thành zero. Để giải quyết vấn đề này, hãy xem xét

Thử nghiệm

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

  1. Ở thanh menu, hãy nhấp vào nút Chơi . Studio bắt đầu chế độ thử nghiệm.

    Studio's Home tab with the Play button highlighted in the menu bar.
  2. Di chuyển nhân vật của bạn để thu thập một số 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ố lượng tiền tệ trên bảng xếp hạng được thiết lập lại thành 0 .