前面一篇大致簡單的介紹了下Input System,並且通過官方的 SimpleDemo_UsingPlayerInput 來了解了PlayerInput組件的使用。接下來讓我們通過其他幾個Demo來了解下Input System的其他幾種使用方法。
SimpleDemo_UsingActionAsset Demo
這個Demo,相比SimpleDemo_UsingPlayerInput,會發現在這個Demo中並沒有使用到Player Input組件,而在SimpleController_UsingActionAsset.cs中,多了一個SimpleControls的類。
我們來看下SimpleControls內部,首先有個Json格式的字符串,大致看下內容會發現其就是SimpleDemo_UsingPlayerInput中PlayerInput通過Create Action生成的SimpleControls.inputactions文件的內容。再往後便是聲明inputactions文件中配置的Actions等等。
使用起來也不需要在Player Input組件中去綁定事件,只需要使用代碼來綁定即可,例如:
m_Controls = new SimpleControls();
m_Controls.gameplay.fire.performed +=
ctx =>
{
//to something
};
m_Controls.gameplay.fire.started +=
ctx =>
{
//to something
};
而要讀取輸入設備的值也很方便,例如
public void Update()
{
var look = m_Controls.gameplay.look.ReadValue<Vector2>();
var move = m_Controls.gameplay.move.ReadValue<Vector2>();
//todo something
}
那麼這個SimpleControls.cs腳本是如何生成的呢,我們點擊SimpleControls.inputactions,在Inspector面板中,我們可以發現可以將其生成C#文件,設置好參數後點擊Apply即可生成對應的C#文件。
SimpleDemo_UsingActions Demo
這個Demo中同樣沒有使用到Player Input組件,而是在腳本中添加了幾個InputAction事件。在Inspector面板中,我們可以看見這幾個InputAction的設置。
可以看見demo中綁定的都是手柄GamePad的輸入,我們可以在Fire Action中點擊 + 號,選擇Add Binding,然後綁定鼠標左鍵。這樣運行的時候可以通過點擊左鍵來觸發開火功能。
具體的代碼實現也很簡單,通過給InputAction綁定事件,以及通過ReadValue方法來讀取值即可。
SimpleDemo_UsingState Demo
這個Demo和上一篇文章中,最初的方法一樣,通過Gamepad.current來獲取輸入設備並且綁定事件等,這裏就不在複述了。
隨着Input System的更新,官方的Demo可能也會有所出入,文章用的版本是1.0.0 preview.4。
個人認爲通過inputactions文件生成C#類,再去操作的方法比較適合項目的開發,因爲大部分都是靠代碼來實現的把。
後續還待深入研究。。。