Kết nối nhập người dùng với các hành động cho phép người dùng có được kiểm soát tốt hơn và thông minh hơn về 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 nạp lại với một chìa khóa cụ thể.
Bắt đầu
Hướng dẫn này sử dụng công cụ Blaster được tạo trong Creating Player Tools . Bạn có thể theo dõi những hướng dẫn đó để tạo công cụ hoặc bạn có thể tải mô hình Blaster và thêm vào 1> StarterPack1> .
Các mô hình có thể được thêm vào kho của bạn để được 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 một trình duyệt, mở trang mẫu, nhấp vào nút Lấy . Điều này thêm mô hình vào kho đồ của bạn.
- Trong Studio, đi đến Trang chủ tab và nhấp vào Hộp công cụ.
- Trong cửa sổ Toolbox, hãy nhấp vào nút Inventory . Sau đó, hãy đảm bảo rằng mục dưới cuộn dây ở My Models .
- Chọn mô hình Blaster để thêm vào trải nghiệm.
Tạo một Action Handler
Đầu tiên, bạn sẽ cần một chức năng để xử lý khi người dùng nhập.
Mở ToolController LocalScript bên trong Blaster.
Tạo một biến để lưu tên 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 chức năng tên trênHành động nhận ba argument: actionName , inputState và inputObject . Đây sẽ là chức năng chạy khi người dùng nhập được.
local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)endlocal function toolEquipped()tool.Handle.Equip:Play()endTrong hàm, kiểm tra rằng actionName đã trùng với tên hành động nạp lại và đảm bảo inputState đã được UserInputState.Begin (nguyên trạng khởi đầu). Điều này quan trọng vì hà
local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thenendendĐể làm cho nó rõ ràng khi người dùng nạp lại, thay đổi TextureId của công cụ thành "rbxassetid://6593020923" cho một thời gian, sau đó thay đổi nó trở lại giá trị nguyên bản của nó <
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
Kết Nối Hành Động
ContextActionService có thể được sử dụng để kết nối một chức năng với một lượng dữ liệu cụ thể bằng cách sử dụng chức năng BindAction, nhận nhiều lập trình:
- Tên hành động
- Hàm để xử lý hành động (cũng được gọi là một " callback")
- Dù nên hiển thị nút trên màn hình chạm hay không
- Bất kỳ số lượng nào của Enum.KeyCodes để phát hiện và liên kết với hành động.
KeyCodes là giá trị đại diện cho các nút nhập khác nhau, chẳng hạn như các nút bàn phím hoặc nút điều khiển. Một danh sách đầy đủ các mã có sẵn here .
Nhận ContextActionService ở đầu trên của script.
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"Trong hàm toolEquipped, gọi BindAction và qua các引数 sau đây:
- Tên hành động ( RELOAD_ACTION )
- Người xử lý hành động ( onAction )
- Một giá trị để tạo một nút chạm ( true )
- Một phím nhấn để 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()endPlaytest bằng cách trang bị công cụ và nhấn R key on your keyboard. The backpack icon should momentarily change to a waiting symbol to signal that the weapon is reloading:
Huỷ kết nối hành động
Khi người dùng bỏ đồ dùng, hành động cần phải là unbound để họ không thể nạp lại mà không có công cụ được trang bị.
Tạo một chức năng mới có tên là toolUnequipped và gọi UnbindAction , 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 đến sự kiện Unequipped để chức năng sẽ chạy khi sự kiện bắt đầu.
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)Thử nghiệm để xác nhận rằng mọi thứ hoạt động đúng. Bạn nên có thể nạp lại khi công cụ được trang bị, nhưng không phải khi nó bị bỏ rơi.
Hoạt hình nạp đạn của bạn bây giờ đã hoàn thành - cho một thử thách bổ sung, hãy thử đếm một đếm ngược mỗi khi máy bay phóng thuốc nổ. Bạn có thể then deactivate the toolActivated function khi máy bay không có đạn, sau đó kích hoạt lại nó khi hoạt hình nạp đạn kết thúc