一、前言
這篇文章將會講述如何使用程式腳本讀取 Input System 的玩家輸入。
二、輸入系統(tǒng)(InputSystem)
輸入系統(tǒng)是極為便利的 Unity 官方控制系統(tǒng),可以監(jiān)控玩家不同的輸入並且支持不同輸入方式(Ex. 鍵鼠 & 手把),或是讓玩家自定義按鍵。
1. 簡介與介面說明
在前一篇文章中,我們討論了 Input System 的 Input Map 的介面簡介與詳細的細節(jié)參數(shù),如果有因此自行摸索看看,那你會發(fā)現(xiàn)你已經(jīng)掌握了 Input Map了,接下來我們會講述如何使用設定好的 Input Map。
2. 行為模式(Behavior)
Input System 有四種輸入方式 ,包含:
1.Send Messages.
2.Broadcast Messages.
3.Invoke Unity Events.
4.Invoke C Sharp Events.
這次我們會用 Send Messages模式,能因此用程式腳本去讀取 Input System。
3. 輸入變數(shù)(Input Value)
在 1. 與 2.都是讓 Unity 對遊戲角色或場景發(fā)送訊息,若遊戲物件有輸入系統(tǒng)對應的程式腳本,就能使用 InputAction.CallbackContext 或 InputValue 接收訊息,不過 CallbackContext 只能在 Unity Events 運作。
我曾經(jīng)以為這是一個沒有修正的 Bug,於是回報錯誤給 Unity 官方,他們倒是很直接地跟我說 callbackContext只能用於 Unity Events。
三、應用方式
接下來講述如何用程式腳本讀取InputSystem,請務必確認程式腳本中的函式或參數(shù)都要用 public 公開,InputSystem才能抓到物件。
1. 創(chuàng)建程式腳本
首先,創(chuàng)建一個程式腳本,我們會用這個程式腳本讀取 Input System 的變數(shù)與輸入,因此命名可以類似「ControllerInput」或「PlayerInput」等相關的命名,未來我們可以藉由這個腳本對整個遊戲進行控制。
2. 添加程式腳本與輸入系統(tǒng)同遊戲物件
在 Hierarchy 中新增一個遊戲物件,或是創(chuàng)建一個角色,在這個遊戲物件裡面放置 InputSystem ,並把剛創(chuàng)建好的程式腳本添加進去。
3. 設定 Input System
在 Input System 中,我們把製作好的 Action Map 放在 Action 欄位,並把 Behavior 調(diào)整為Send Messages。
4. 設定 Input System 的 Action 欄位中的 ActionMap
Action Map 中一定要包含一個完整的綠色項目,可以有任意藍色或紫色項目,其中綠色項目的命名,就是我們會在程式腳本中看到的命名。
5. 檢查 We sendMessage() to GameObject:
這時檢查 Input System 的底部,會發(fā)現(xiàn)有官方的提示,會出現(xiàn)一些關於你輸入系統(tǒng)的函式,其名稱為綠色項目前方加英文「On」,假設你的綠色項目名稱叫做 Button_Right,Inspector 中會出現(xiàn) OnButton_Right。
6. 創(chuàng)建同名含式與特殊參數(shù)
在程式腳本中創(chuàng)建同名稱的 void 函式,不過參數(shù)必須要為 InputValue,可以把參數(shù)命名為 value。
public void OnController_Button_A(InputValue value)
{
Input_Button_A(value.isPressed);
}
7. 讀取特殊參數(shù)的變化
我們可以直接使用這個參數(shù)去做讀取,例如isPressed,也可以創(chuàng)建一個新的函數(shù)去讀取 value,維持可讀性。
public void Input_Button_A(bool newButtonState)
{
ButtonA = newButtonState;
}
其中 ButtonA 是自己的程式腳本創(chuàng)建的布林,用於給其他程式使用。
8. 完成
以上,可以點擊 Play 確認效果。
四、後記
這篇文章暫時補足了 InputSystem的詳細操作,未來如果有接觸到其他輸入系統(tǒng)的其他操作方式,會在撰寫相關文章。