Tạo một Coin Collection Mechanic

*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.


Bây giờ bạn có một thế giới 3D, bài hướng dẫn này của hướng dẫn cho bạn cách thêm script đầu tiên của bạn để xác định một cơ chế thu thập tiền tệ. Cơ chế này cho phép người chơi thu thập tiền tệ, và tắt cơ chế thu thập tiền tệ nếu nó đã được thu thập gần đây.

Tạo ra Đồng xu

Trước khi bạn có thể lập trình bất cứ thứ gì, bạn cần phải có các đối tượng người dùng để sử dụng như xu của bạn. Giống như các tấm thẻ bể bơi bạn đã tạo ở phần trước, xu có thể là những đối tượng người dùng đơn giản Part .

Để tạo ra các xu:

  1. Trong cửa sổ Explorer , thêm một thư mục mới vào cửa sổ World và đổi tên nó thành Coins .

  2. Lấy một phần trục tròn vào tập tin Coins , sau đó đổi tên phần Coin thành 1> Coin1>.

    Studio's Explorer window with the Coin part highlighted. The hierarchy of the Workspace to World folder to Coins folder to Coin part is also highlighted.
  3. Chọn bộ phận, sau đó trong cửa sổ Tên tùy thuộc ,

    • Đặt Màu gạch lên Vàng .
    • Đặt Vật liệu để Kim loại .
    • Đặt Kích thước lên 0.6, 8, 4 .
    • Vô hiệu hóa CanCollide . Điều này choEngine biết rằng các bộ phận khác nhau có thể vượt qua mảnh nhãn, có nghĩa là người chơi có thể đi qua mảnh nhãn để thu thập chúng.
    • Kích hoạt Cố định . Điều này cho phép máy chủ không bao giờ thay đổi vị trí của đồng xu do bất kỳ simulazione liên quan đến vật lý, có nghĩa là người chơi có thể chạm vào đồng xu mà không ảnh hưởng đến vị trí của nó.
    A close up view of a gold coin next to two gray cylinder sea stacks on the island.
  4. Nhân bản một vài xu nữa và đặt chúng xung quanh bản đồ để mục đích thử nghiệm.

    Studio's Explorer window with multiple Coin parts highlighted under the Coins folder. A view of multiple coins on the island and two gray cylinder sea stacks.

Các bộ phận trụ cylinder của bạn bây giờ trông giống như những quả tiền và ngăn chặn simulazione vật lý, nhưng bạn cần thêm logic cho những quả tiền để người chơi có thể thu thập chúng.

Tạo Skript

Để có đồng xu để thu thập, bạn muốn phản ứng với người chơi chạm vào chúng. Roblox engine có thể thông báo cho bạn khi một cái gì đó chạm vào một đồng xu, nhưng bạn cần phải tuyên bố điều đó trong một script. Để tạo một script:

  1. Trong cái Explorer window, hover over ServerScriptService and click the button. A menu context displayed.

  2. Từ menu ng上 context, select Script . Một script mới được hiển thị dưới ServerScriptService , which tells the engine to run the script on the máy chủ, and防止客户端 truy cập mã.

    Studio's Explorer window with both ServerScriptService's plus icon and Script object highlighted.
  3. Đổi tên script thành CoinService .

    Studio's Explorer window with the CoinService script highlighted under ServerScriptService.
  4. Thay thế mã mặc định bằng mã sau đây:


    -- Khởi tạo dịch vụ và biến
    local Workspace = game:GetService("Workspace")
    local Players = game:GetService("Players")
    local coinsFolder = Workspace.World.Coins
    local coins = coinsFolder:GetChildren()
    local COOLDOWN = 10
    -- Định nghĩa hệ thống trao tặng sự kiện
    local function onCoinTouched(otherPart, coin)
    if coin:GetAttribute("Enabled") then
    local character = otherPart.Parent
    local player = Players:GetPlayerFromCharacter(character)
    if player then
    -- Người chơi đã chạm vào một xu
    coin.Transparency = 1
    coin:SetAttribute("Enabled", false)
    print("Player collected coin")
    task.wait(COOLDOWN)
    coin.Transparency = 0
    coin:SetAttribute("Enabled", true)
    end
    end
    end
    -- Tùy chỉnh người lắng nghe sự kiện
    for _, coin in coins do
    coin:SetAttribute("Enabled", true)
    coin.Touched:Connect(function(otherPart)
    onCoinTouched(otherPart, coin)
    end)
    end

    Bây giờ, mỗi khi một người chạm vào một xu, xu sẽ biến mất trong 10 giây, và lệnh ra Player collected coin .

    Các mục tiếp theo mô tả cách script hoạt động chi tiết hơn.

    Khởi tạo Dịch vụ và Biến đổi

    Giống như với rất nhiều mã bạn đã có lẽ đã viết bằng nhiều ngôn ngữ khác, bạn định nghĩa các biến mà bạn cần sau đó ở đầu của script. Mã của chúng tôi làm theo theo dõi:

    • Lấy các thành phần dịch vụ - Roblox services cung cấp các chức năng tích hợp cho các tính năng phổ biến. Script đầu tiên có được các thành phần dịch vụ của Workspace 服务, which contains tất cả các đối tượng trong thế giới 3D, v

    • Lấy tham chiếu đến tất cả các loại tiền tệ - Khi đó, script thì tra xuất 3D workspace cho tất cả các tham chiếu đến coin objects với phương pháp GetChildren() . Phương pháp này trả về một阵 đựng tất cả nh

    • Định nghĩa một biến đổi toàn cầu - Biến đổi COOLDOWN được sử dụng sau đó để xác định thời gian ngừng hoạt động của một đồng xu sau khi nó được thu thập.

      Khởi tạo Dịch vụ và Biến đổi

      local Workspace = game:GetService("Workspace")
      local Players = game:GetService("Players")
      local coinsFolder = Workspace.World.Coins
      local coins = coinsFolder:GetChildren()
      local COOLDOWN = 10
      ...

    Định nghĩa xử lý sự kiện

    Động cơ Roblox tạo thành các thành phần của Roblox vật lý, hành xử nhiều hệ thống trong thế giới 3D và xử lý nhiều hệ thống trong thế giới thực. Khi bạn quan tâm đến việc lập trình của riêng

    • Xác định có phải bật tiền xu - Mọi Class.Instance đều có một đặc tính Instance để xác định có hay không tồn tại của đối tượng trong thế giới 3D. Bạn có thể nhận được các đặc tính instan với phương thức

    • Xác định có phải một người chơi đã chạm vào một xu - Nếu một xu được bật, phương thức sử dụng dịch vụ người chơi để kiểm tra nếu đối tượng đã chạm vào một xu là một người chơ

    • Vô hiệu hóa tiền xu nếu một người chạm vào nó, và kích hoạt lại nó sau 10 giây - Cuối cùng, nếu một người chạm vào tiền xu, phương thức kích hoại tiền xu, chờ đ

      Định nghĩa Handler Sự kiện

      local function onCoinTouched(otherPart, coin)
      if coin:GetAttribute("Enabled") then
      local character = otherPart.Parent
      local player = Players:GetPlayerFromCharacter(character)
      if player then
      -- Người chơi đã chạm vào một xu
      coin.Transparency = 1
      coin:SetAttribute("Enabled", false)
      print("Player collected coin")
      task.wait(COOLDOWN)
      coin.Transparency = 0
      coin:SetAttribute("Enabled", true)
      end
      end
      end

    Kết Nối Người Xử Lý Sự Kiện

    Tất cả các đối tượng 3D tương tự đều thừa hưởng từ BasePart và do đó có một sự kiện Touched() . Hệ thống sau đó kết nối nhà cung cấp đối tượng onTouchedEvent() đến mọi sự kiện chạm

    • Loop qua tất cả các xu - Loop qua mỗi trong số các xu bằng cách sử dụng itération chung.

    • Kết nối người điều khiển với sự kiện - Trong mỗi lần lặp của loạt, hệ bỏng được bật bởi mặc định, vì vậy nó có thể được thấy trong th

      Kết Nối Trình Xử Lý Sự Kiện

      for _, coin in coins do
      coin:SetAttribute("Enabled", true)
      coin.Touched:Connect(function(otherPart)
      onCoinTouched(otherPart, coin)
      end)
      end

Thử nghiệm Nhà sản xuất

Đã đến lúc xem xét xem liệu cơ chế thu thập tiền xu như ý muốn của bạn có hoạt động không. Để thử nghiệm trải nghiệm của bạn:

  1. Ở thanh menu, hãy nhấp vào nút Chơi . Studio tham gia vào 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 để chạm vào một xu. Nếu các kịch bản của bạn hoạt động đúng cách, các cửa sổ Thoát hiển thị Player collected coin , và mục tốt sẽ biến mất trong 10 giây trước khi xu xuất hiện lại.

    Studio's Output window that displays confirmation that the player collected a coin.