連接使用者輸入的輸入到行動中,給使用者更好、更直觀的控制過您的體驗的功能。 在這個教學中,您將綁定重新載入行動到特定的鍵。
開始
此教學使用 創建玩家工具 創建的 爆破器 工具。 您可以跟隨這些指示來創建工具或者您可以下載 爆破器 模型並將其插入 2> 新手包2> 。
您可以將模型添加到您的道具欄中,以在任何體驗之間使用。要將模型添加到您的體驗:
- 在瀏覽器中,開啟 模型 頁面,按一下 取得 按鈕。這樣會將模型添加到您的道具欄。
- 在 Studio 中,前往檢視標籤,然後按一下工具箱。
- 在工具箱窗口中,單擊 物品欄 按鈕。然後確認是否在 我的模型 下拉欄表中。
- 選擇 Blaster 模型,將它添加到體驗。
創建一個行動處理器
首先,您需要一個處理用戶輸入時是否偵測到的函數。
在 Blaster 內的 工具控制器 LocalScript 。
建立變數以儲存行動作的名稱。
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)在Action中創建名為 onAction 的函數,接受三個參數:actionName、inputState 和inputObject。這將是在使用者輸入被偵測到時執行的函數。
local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)endlocal function toolEquipped()tool.Handle.Equip:Play()end在 function 內,檢查 actionName 與 inputState 的重新載入行動名稱一致,並確認 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 thenendend要在用戶重新載入時顯得明顯,請將工具的 TextureId 變更為 "rbxassetid://6593020923" ,然後再次變更為其原始值 "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
綁定行動
ContextActionService 可以用來將函數綁定到特定輸入,使用 Class.ContextActionService:BindAction()|BindAction 函數,其接受了多個參數:
- 動作動的名稱
- 處理操作的函數(也稱「回調」)
- 是否顯示觸摸屏按鈕
- 任何 Enum.KeyCodes 數量來偵測並與動作動協助。
鑰匙代碼是代表不同輸入按鈕的值,例如鍵盤按鍵或控制器按鈕。全部代碼清單可用於 here。
在指令碼的頭部獲得 ContextActionService。
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"在 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 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()end裝備工具並按下您的鍵盤上的 R 按鈕,以進行測試。背包圖示應該會呈現暫時變更為警告符號,表示武器正在重新裝彈:
解除操作的綁定
當使用者卸下工具時,操作需要是 解除綁定 ,以便他們無法重新載入工具未裝備的情況下重新載入。
創建名為 toolUnequipped 的新函數,並且呼叫 UnbindAction,繼續通過行動名稱。
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)連接 toolUnequipped 函數到 Unequipped 事件,讓函數在事件發生時執行。
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)進行遊戲測試以確認一切正常運作。你應該能夠在裝備工具時重新載入,但不能在未裝備時。
您的裝填動畫現在完成了 - 為額外的挑戰,請試著每次發射雷管時計數一個彈藥櫃。您可以然後停用 toolActivated 功能,當砲沒有彈藥時,再重新啟用一次裝填動畫完成。