Phát hiện nhập của người dùng

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

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:

  1. 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.
  2. Trong Studio, hãy đi đến tab Xem và nhấp vào Hộp công cụ .
  3. 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 .
  4. 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.

  1. Mở Trình điều khiển công cụ LocalScript bên trong.

  2. Tạo một biến để lưu tên cho hành động.


    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Activated:Connect(toolActivated)
  3. 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.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    end
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
  4. Bê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 then
    end
    end
  5. Để 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 then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end

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 .

  1. Nhận ContextActionService ở đầu của kịch bản.


    local ContextActionService = game:GetService("ContextActionService")
    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
  2. 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 then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end
    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
  3. Thử 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ị.

  1. 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()
    end
    local function toolUnequipped()
    ContextActionService:UnbindAction(RELOAD_ACTION)
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Activated:Connect(toolActivated)
  2. 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.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end
    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
    local function toolUnequipped()
    ContextActionService:UnbindAction(RELOAD_ACTION)
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Unequipped:Connect(toolUnequipped)
    tool.Activated:Connect(toolActivated)
  3. 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.