Unity 新的輸入系統Input System(二)

前面一篇大致簡單的介紹了下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#類,再去操作的方法比較適合項目的開發,因爲大部分都是靠代碼來實現的把。

後續還待深入研究。。。

發佈了72 篇原創文章 · 獲贊 166 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章