Kết nối đầu vào người dùng với các hành động mang lại cho người dùng kiểm soát tốt hơn và dễ hiểu 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ẽ gắn một hành động tải lại vào một chìa khóacụ 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ụ người chơi .Bạn có thể tuân theo những 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 .
Các mô hình có thể được thêm vào Kho hàng 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 một trình duyệt, mở trang mô hình , nhấp vào nút Nhận . Điều này thêm mô hình vào kho lưu trữ của bạn.
- Trong Studio, hãy đi đến tab Xem và nhấp vào Hộp công cụ .
- Trong cửa sổ Toolbox, hãy nhấp vào nút Túi đồ . Sau đó, hãy chắc chắn rằng menu thả xuống ở Mô hình của tôi .
- Chọn mô hình Blaster để thêm vào trải nghiệm.
Tạo một xử lý hành động
Trước tiên, bạn sẽ cần một chức năng để xử lý khi phát hiện đầu vào của người dùng.
Mở Trình điều khiển công cụ LocalScript bên trong.
Tạo một biến để lưu 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 chức năng có tên onAction nhận ba tham số: actionName , inputState , và inputObject .Đây sẽ là chức năng chạy khi người dùng nhập đượ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 chức năng, kiểm tra xem đầu vào actionName đã phù hợp với tên hành động tải lại và chắc chắn rằng inputState đã là UserInputState.Begin (trạng thái khởi đầu).Điều này quan trọng vì chức năng sẽ chạy mỗi khi có sự thay đổi inputState, nhưng việc tải lại chỉ cần xảy ra một lần.
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 tải lại, thay đổi TextureId của công cụ thành "rbxassetid://6593020923" trong một lúc, và sau đó thay đổi trở lại 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
Gắn kết hành động
ContextActionService có thể được sử dụng để bind một chức năng vào một đầu vào cụ thể bằng cách sử dụng chức năng BindAction, nhận nhiều tham số:
- Tên của hành động
- Chức năng xử lý hành động (cũng được gọi là " callback")
- Liệu có nên hiển thị 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 nhập 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 đủ các mã có sẵn here .
Nhận ContextActionService ở đầu của kịch bản.
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"Bên trong chức năng toolEquipped, gọi BindAction và truyền qua các tham số sau:
- Tên của 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()endThử nghiệm 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.Biểu tượng ba lô nên thay đổi tạm thời thành một biểu tượng chờ đợi để tín hiệu rằng vũ khí đang được nạp đạn:
Huỷ liên kết hành động
Khi người dùng bỏ trang bị công cụ, hành động cần phải không gắn kết để họ không thể tải 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, thông 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 chức năng toolUnequipped với sự kiện Unequipped để chức năng sẽ chạy khi sự kiện bắt lửa.
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ể tải lại khi công cụ được trang bị, nhưng không phải khi nó không được trang bị.
Hoạt hình nạp lại của bạn đã hoàn thành - đối với một thử thách bổ sung, hãy thử đếm ngược một băng đạn mỗi khi blaster bắn ra.Bạn có thể vô hiệu hóa chức năng toolActivated khi súng không có đạn, sau đó kích hoạt lại nó một khi hoàn thành hoạt họa nạp đạn.