偵測使用者輸入

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

連接使用者輸入的輸入到行動中,給使用者更好、更直觀的控制過您的體驗的功能。 在這個教學中,您將綁定重新載入行動到特定的鍵。

開始

此教學使用 創建玩家工具 創建的 爆破器 工具。 您可以跟隨這些指示來創建工具或者您可以下載 爆破器 模型並將其插入 2> 新手包2> 。

您可以將模型添加到您的道具欄中,以在任何體驗之間使用。要將模型添加到您的體驗:

  1. 在瀏覽器中,開啟 模型 頁面,按一下 取得 按鈕。這樣會將模型添加到您的道具欄。
  2. 在 Studio 中,前往檢視標籤,然後按一下工具箱。
  3. 在工具箱窗口中,單擊 物品欄 按鈕。然後確認是否在 我的模型 下拉欄表中。
  4. 選擇 Blaster 模型,將它添加到體驗。

創建一個行動處理器

首先,您需要一個處理用戶輸入時是否偵測到的函數。

  1. 在 Blaster 內的 工具控制器 LocalScript

  2. 建立變數以儲存行動作的名稱。


    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. 在Action中創建名為 onAction 的函數,接受三個參數:actionNameinputStateinputObject。這將是在使用者輸入被偵測到時執行的函數。


    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    end
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
  4. 在 function 內,檢查 actionNameinputState 的重新載入行動名稱一致,並確認 UserInputState.Begin 是 2>Ennum.UserInputState|Ennum.UserInputState.Begin2> (開始狀態)。這很重要,因為功能會在 5>inputState5> 變更時執行,但重新載入只需要發


    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    end
    end
  5. 要在用戶重新載入時顯得明顯,請將工具的 TextureId 變更為 "rbxassetid://6593020923" ,然後再次變更為其原始值 "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

綁定行動

ContextActionService 可以用來將函數綁定到特定輸入,使用 Class.ContextActionService:BindAction()|BindAction 函數,其接受了多個參數:

  • 動作動的名稱
  • 處理操作的函數(也稱「回調」)
  • 是否顯示觸摸屏按鈕
  • 任何 Enum.KeyCodes 數量來偵測並與動作動協助。

鑰匙代碼是代表不同輸入按鈕的值,例如鍵盤按鍵或控制器按鈕。全部代碼清單可用於 here

  1. 在指令碼的頭部獲得 ContextActionService


    local ContextActionService = game:GetService("ContextActionService")
    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
  2. toolEquipped 函數內,呼叫 BindAction 並穿過以下參數:

    • 動作的名稱(RELOAD_ACTION
    • 行動處理器 ( onAction )
    • 一個值創建觸摸按鈕(true)
    • 按鍵按下以檢測 ( 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. 裝備工具並按下您的鍵盤上的 R 按鈕,以進行測試。背包圖示應該會呈現暫時變更為警告符號,表示武器正在重新裝彈:

解除操作的綁定

當使用者卸下工具時,操作需要是 解除綁定 ,以便他們無法重新載入工具未裝備的情況下重新載入。

  1. 創建名為 toolUnequipped 的新函數,並且呼叫 UnbindAction,繼續通過行動名稱。


    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. 連接 toolUnequipped 函數到 Unequipped 事件,讓函數在事件發生時執行。


    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. 進行遊戲測試以確認一切正常運作。你應該能夠在裝備工具時重新載入,但不能在未裝備時。

您的裝填動畫現在完成了 - 為額外的挑戰,請試著每次發射雷管時計數一個彈藥櫃。您可以然後停用 toolActivated 功能,當砲沒有彈藥時,再重新啟用一次裝填動畫完成。