Kết nối đầu vào của người dùng với các hành động giúp người dùng có quyền kiểm soát tốt hơn và trực quan hơn đối với các tính năng của trải nghiệm của bạn. Trong hướng dẫn này, bạn sẽ liên kết một hành động làm mới với một phím cụ thể.
Bắt đầu
Hướng dẫn này sử dụng công cụ Blaster được tạo ra trong Tạo công cụ cho người chơi. Bạn có thể làm theo hướng dẫn đó để tạo công cụ hoặc bạn có thể tải xuống mô hình Blaster và chèn nó vào StarterPack.
Mô hình có thể được thêm vào Kho đồ của bạn để sử dụng giữa bất kỳ trải nghiệm nào. Để thêm một mô hình vào trải nghiệm của bạn:
- Trong trình duyệt, mở trang mô hình, nhấn nút Get. Điều này sẽ thêm mô hình vào kho đồ của bạn.
- Đảm bảo rằng menu thả xuống đang ở chế độ My Models.
- Chọn mô hình Blaster để thêm nó vào trải nghiệm.
Tạo một bộ xử lý hành động
Trước tiên, bạn sẽ cần một hàm để xử lý khi đầu vào của người dùng được phát hiện.
Mở LocalScript ToolController bên trong của Blaster.

Tạo một biến để lưu trữ một tên cho hành động.
local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function toolEquipped()tool.Handle.Equip:Play()endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Activated:Connect(toolActivated)Tạo một hàm có tên onAction nhận ba tham số: actionName, inputState, và inputObject. Đây sẽ là hàm được chạy khi đầu vào của người dùng được phát hiện.
local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)endlocal function toolEquipped()tool.Handle.Equip:Play()endBên trong hàm, kiểm tra rằng actionName đã cho có khớp với tên hành động làm mới và đảm bảo rằng inputState là UserInputState.Begin (trạng thái bắt đầu). Điều này rất quan trọng vì hàm sẽ chạy mỗi khi inputState thay đổi, nhưng hành động làm mới chỉ cần diễn ra một lần.
local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thenendendĐể làm cho việc người dùng làm mới trở nên rõ ràng, hãy thay đổi TextureId của công cụ thành "rbxassetid://6593020923" trong một khoảng thời gian, và sau đó đổi lại thành giá trị gốc của nó là "rbxassetid://92628145".
local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endend
Ràng buộc hành động
ContextActionService có thể được sử dụng để ràng buộc một hàm cho một đầu vào cụ thể bằng cách sử dụng hàm BindAction, chấp nhận một số đối số:
- Tên của hành động.
- Hàm để xử lý hành động (còn được gọi là "callback").
- Liệu có nên hiển thị một nút cảm ứng hay không.
- Bất kỳ số lượng Enum.KeyCodes nào để phát hiện và liên kết với hành động.
KeyCodes là các giá trị đại diện cho các nút đầu vào khác nhau, chẳng hạn như phím bàn phím hoặc nút điều khiển. Một danh sách đầy đủ về mã có thể được tìm thấy tại đây.
Lấy ContextActionService ở đầu kịch bản.
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"Trong hàm toolEquipped, gọi BindAction và truyền qua các đối số sau:
- Tên của hành động (RELOAD_ACTION)
- Bộ xử lý hành động (onAction)
- Một giá trị để tạo một nút cảm ứng (true)
- Một phím bấm để phát hiện (Enum.KeyCode.R)
local RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endendlocal function toolEquipped()ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)tool.Handle.Equip:Play()endChơi thử bằng cách trang bị công cụ và nhấn phím R trên bàn phím của bạn. Hình ảnh ba lô nên thay đổi tạm thời thành một biểu tượng chờ để báo hiệu rằng vũ khí đang làm mới:
Hủy ràng buộc hành động
Khi người dùng bỏ trang bị công cụ, hành động cần được hủy ràng buộc để họ không thể làm mới mà không có công cụ đang được trang bị.
Tạo một hàm mới có tên toolUnequipped và gọi UnbindAction, truyền qua tên hành động.
local function toolEquipped()ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)tool.Handle.Equip:Play()endlocal function toolUnequipped()ContextActionService:UnbindAction(RELOAD_ACTION)endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Activated:Connect(toolActivated)Kết nối hàm toolUnequipped với sự kiện Unequipped để hàm sẽ chạy khi sự kiện xảy ra.
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endendlocal function toolEquipped()ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)tool.Handle.Equip:Play()endlocal function toolUnequipped()ContextActionService:UnbindAction(RELOAD_ACTION)endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Unequipped:Connect(toolUnequipped)tool.Activated:Connect(toolActivated)Chơi thử để xác nhận rằng mọi thứ hoạt động chính xác. Bạn nên có thể làm mới khi công cụ được trang bị, nhưng không thể làm khi nó đã được bỏ trang bị.
Hoạt ảnh làm mới của bạn bây giờ đã hoàn tất - để thách thức thêm, hãy thử đếm ngược một bộ đếm đạn mỗi khi khẩu súng bắn. Sau đó, bạn có thể vô hiệu hóa hàm toolActivated khi súng không còn đạn, rồi kích hoạt lại nó khi hoạt ảnh làm mới đã hoàn thành.