Bây giờ bạn đã có một thế giới 3D, phần này của hướng dẫn dạy bạn cách thêm kịch bản đầu tiên của bạn để xác định một cơ chế thu thập tiền xu.Cơ chế này cho phép người chơi thu thập tiền xu và vô hiệu hóa việc thu thập một tiền xu nếu nó đã được thu thập gần đây.
Tạo những đồng tiền
Trước khi bạn có thể viết kịch bản bất cứ điều gì, bạn cần phải có các đối tượng giả dối trong thế giới để sử dụng làm tiền của bạn.Giống như các nền tảng xếp chồng biển mà bạn đã tạo trong phần trước, các đồng xu có thể đơn giản Part đối tượng.
Để tạo ra các đồng xu:
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 Tiền xu .
Chèn một phần xi-lanh vào thư mục Tiền xu , sau đó đổi tên phần thành Tiền xu .
Chọn phần, sau đó trong cửa sổ Tính năng ,
- Đặt BrickColor thành Vàng .
- Đặt Vật liệu đến Kim loại .
- Đặt Kích thước đến 0.6, 8, 4.
- 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 tiền xu, có nghĩa là người chơi có thể đi qua các tiền xu để thu thập chúng.
- Bật Ghim .Điều này cho thiết động cơ không bao giờ thay đổi vị trí của tiền xu 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 tiền xu mà không ảnh hưởng đến vị trí của nó.
Sao chép thêm một vài đồng tiền và đặt chúng xung quanh bản đồ để kiểm tra mục đích.
Các bộ phận hình trụ của bạn giờ đã trông giống như tiền xu và ngăn chặn mô phỏng vật lý, nhưng bạn cần phải thêm logic vào tiền xu để người chơi có thể thu thập chúng.
Tạo kịch bản
Để có những đồng tiền có thể thu thập được, bạn muốn phản ứng với người chơi chạm vào chúng.Cơ chế Roblox có thể thông báo cho bạn khi có thứ gì đó chạm vào một đồng tiền, nhưng bạn cần phải tuyên bố điều đó trong một kịch bản.Để tạo một kịch bản:
Trong cửa sổ Explorer , di chuột qua ServerScriptService và nhấp vào nút ⊕ . Một menu ngữ cảnh hiển thị.
Từ menu ngữ cảnh, hãy chọn Tập lệnh .Một kịch bản mới hiển thị dưới ServerScriptService , cho phép động cơ thực hiện kịch bản trên máy chủ và ngăn chặn các khách hàng truy cập mã.
Đổi tên kịch bản thành CoinService .
Thay thế mã mặc định bằng mã sau:
-- Khởi tạo các dịch vụ và biến sốlocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal coins = coinsFolder:GetChildren()local COOLDOWN = 10-- Xác định người xử lý sự kiệnlocal function onCoinTouched(otherPart, coin)if coin:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Người chơi chạm vào một đồng xucoin.Transparency = 1coin:SetAttribute("Enabled", false)print("Player collected coin")task.wait(COOLDOWN)coin.Transparency = 0coin:SetAttribute("Enabled", true)endendend-- Thiết lập người lắng nghe sự kiệnfor _, coin in coins docoin:SetAttribute("Enabled", true)coin.Touched:Connect(function(otherPart)onCoinTouched(otherPart, coin)end)endBây giờ, bất cứ khi nào một người chơi chạm vào một đồng xu, đồng xu biến mất trong 10 giây, và nhật ký ra lệnh in Player collected coin .
Giải thích mãCác phần sau đây mô tả cách thức hoạt động của kịch bản chi tiết hơn.
Khởi tạo dịch vụ và biến
Giống như với nhiều mã bạn có thể đã viết bằng các ngôn ngữ khác, bạn xác định các biến bạn cần sau này ở đầu của kịch bản.Mã của chúng tôi thực hiện những việc theo dõi:
Nhận được tham chiếu đến tất cả các đồng tiền - Tập lệnh sau đó truy vấn không gian làm việc 3D cho tất cả các tham chiếu đến đối tượng tiền bằng phương pháp GetChildren().Phương pháp này trả về một array chứa mọi thứ được gán cho đối tượng nó liên quan, trong trường hợp này là thư mục Workspace.World.Coins mà bạn đã tạo trước đó.
Xác định một biến toàn cầu - Biến COOLDOWN được sử dụng sau đó để xác định thời gian tắt tiền sau khi nó được thu thập.
Khởi tạo các dịch vụ và biến sốlocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal coins = coinsFolder:GetChildren()local COOLDOWN = 10...
Xác định người xử lý sự kiện
Cỗ máy Roblox vật lý mô phỏng thế giới 3D và xử lý rất nhiều logic để xử lý các sự kiện liên quan đến render, vật lý và mạng.Khi bạn quan tâm đến việc lập trình logic riêng của mình trong một số sự kiện này, bạn có thể lắng nghe và xử lý chúng, trong khi để động cơ làm phần còn lại.Trong trường hợp này, bạn lắng nghe và xử lý các sự kiện liên quan đến tiền xu được chạm vào.Tập lệnh xác định logic xử lý sự kiện này trong phương pháp onCoinTouched(), thực hiện những việc theo dõi:
Phát hiện xem tiền xu đã được bật hay chưa - Mỗi Instance có một thuộc tính boolean Enabled xác định xem liệu có hay không có đối tượng tồn tại trong thế giới 3D.Bạn có thể nhận được thuộc tính của instance với phương pháp GetAttribute().
Phát hiện xem có người chơi chạm vào tiền xu hay không - Nếu tiền xu được bật, phương thức sử dụng dịch vụ người chơi để kiểm tra xem đối tượng chạm vào tiền xu có thực sự là người chơi hay không.Khi một sự kiện chạm xảy ra, Roblox Engine chuyển đối tượng chạm vào tiền xu như một tham số otherPart.Tập lệnh kiểm tra xem liệu cha của otherPart có thuộc về một người chơi hay không.
Vô hiệu hóa tiền xu nếu một người chơ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ơi chạm vào tiền xu, phương thức vô hiệu hóa tiền xu, chờ 10 giây, và sau đó kích hoạt lại tiền xu để thu bộ sưu tập. task.wait() được sử dụng thay cho wait() bởi vì nó cung cấp hiệu suất tốt hơn bằng cách không tạm dừng thực thi mã hoàn toàn, cho phép các nhiệm vụ trong các tiến trình khác chạy song song.
Xác định người xử lý sự kiệnlocal function onCoinTouched(otherPart, coin)if coin:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Người chơi chạm vào một đồng xucoin.Transparency = 1coin:SetAttribute("Enabled", false)print("Player collected coin")task.wait(COOLDOWN)coin.Transparency = 0coin:SetAttribute("Enabled", true)endendend
Kết nối xử lý sự kiện
Tất cả các đối tượng 3D giả lập kế thừa từ BasePart và do đó có một sự kiện Touched() .Vòng lặp sau đây kết nối bộ xử lý onTouchedEvent() với sự kiện chạm của mỗi đồng tiền bằng cách thực hiện những việc theo dõi:
Lặp qua tất cả các đồng tiền - Lặp qua mỗi đồng tiền bằng cách sử dụng lặp lại chung.
Kết nối xử lý với sự kiện - Trong mỗi lần lặp lại của vòng lặp, tiền xu được bật mặc định, vì vậy nó có thể nhìn thấy trong thế giới 3D trong khởi động ban đầu của trải nghiệm.Phương thức xử lý onCoinTouched() cũng được kết nối với sự kiện Touched của tiền xu để nó chạy mỗi khi sự kiện xảy ra.Khi động cơ phát hiện một lần chạm, nó cũng truyền qua đối tượng đã chạm vào đối tượng, otherPart .
Kết nối Bộ xử lý sự kiệnfor _, coin in coins docoin:SetAttribute("Enabled", true)coin.Touched:Connect(function(otherPart)onCoinTouched(otherPart, coin)end)end
Thử nghiệm cơ chế
Đã đến lúc xem xem liệu cơ chế thu thập tiền xu hoạt động như dự định. Để kiểm tra trải nghiệm của bạn:
Trong thanh công cụ, nhấp vào nút Chơi . Studio bước vào chế độ thử nghiệm.
Di chuyển nhân vật của bạn để chạm vào một đồng xu.Nếu các kịch bản của bạn hoạt động đúng cách, cửa sổ Xuất hiển thị Player collected coin và tiền xu biến mất trong 10 giây trước khi xuất hiện lại.