Unity新輸入方案InputSystem介紹-(一)

一、安裝InputSystem
????打開Package Manager,記得把高級選項中的"顯示預覽包"打勾。

????選擇InputSystem包,點擊安裝。

????如果網(wǎng)絡不好,或者想要參考官方例子,可以到Github下載項目。Assets文件夾下的文件是官方的測試例子,請根據(jù)你的學習需求進行刪減。不想通過Package Manager安裝InputSystem,也可以用Unity直接打開Github克隆下來的項目。

????打開PlayerSettings,在Active Input Handling中啟用InputSystem功能(兩個選項任一個都行)。

????這時候有可能提醒重啟項目,按下Apply按鈕即可。

????到此,InputSystem安裝完畢。

二、了解InputSystem新增編輯器要素
1.InputSystem設(shè)置
????打開Project Settings,你會發(fā)現(xiàn)多了一個"Input System Package"選項卡。在這里,你可以新建一個設(shè)置資源,來重新設(shè)置InputSystem的更新模式、全局參數(shù)、支持設(shè)備等。

2.InputActionAsset
????點擊菜單欄Assets/Create/Input Actions,即可新建一個InputActionAsset文件。選擇該文件,你會發(fā)現(xiàn)一個編輯按鈕和一個生成C#類選項。

????由于這個編輯器的介紹,會和下一篇一起講,所以這里打開一下,就跳過

????這里先說一點題外話,整個InputSystem中,文本反序列化功能十分強大,可以通過json字符串參數(shù)調(diào)用一些API,來實現(xiàn)復雜的輸入功能。甚至你用文本編輯器打開InputActionAsset文件,也會發(fā)現(xiàn)是個json格式的文本文件。而且自動生成C#類這個功能,應該是官方考慮一些繁瑣操作,特意做的代碼生成器。

3.InputSystem分析工具
????點擊菜單欄Window/Analysis/Input Debugger,會出現(xiàn)下面這個別致的小東西

Devices:當前連接的輸入設(shè)備;
Layouts:當前在InputSystem注冊的Layout和Control;
Settings:InputSystem的設(shè)置;
Metrics:當前一些數(shù)據(jù)統(tǒng)計;
????在這里可以方便查看InputSystem的各類信息和狀態(tài),比如我打開了一個手柄設(shè)備,可以說是所有信息一覽無余。


三、InputSystem設(shè)備管理的大致一覽
????這里簡單總結(jié)一下InputSystem的架構(gòu),一個輸入設(shè)備抽象成Layout(布局),一個輸入元件抽象成Control(控件)。一個設(shè)備像是拼積木玩具似的,一個Layout包含多個Control,然后注冊到InputSystem中。
????現(xiàn)在讓我們回來看看,剛才略過的Input Debugger→Layouts:



????代碼訪問設(shè)備也十分簡單。一類輸入設(shè)備,通常有兩個靜態(tài)屬性,current(當前設(shè)備)和all(所有設(shè)備列表)。比如,打印手柄的右扳機的數(shù)值,可以這樣寫:
print(Gamepad.current.rightTrigger.ReadValue());
????當然Input小老弟能做的事情,InputSystem也能做。比如鼠標剛按下左鍵,鍵盤剛剛彈起空格鍵,可以這么寫:
print(Mouse.current.leftButton.wasPressedThisFrame);
print(Keyboard.current[Key.Space].wasReleasedThisFrame);
????官方也給出了Input遷移到到InputSystem的文檔,大致都是靜態(tài)函數(shù)返回值,變成某一類設(shè)備的Control數(shù)值或是狀態(tài)值,這樣一個套路。為了把大量設(shè)備接口暴露出給開發(fā)者,官方不得不爆肝更新,但可惜正式版也各種跳票。

四、個人對InputSystem的展望
????如果有能力研究源碼的小伙伴,想了解一下各種設(shè)備如何接入InputSystem,可以看看InputSystem/Plugins這個文件夾。這個同時也是作為第三方設(shè)備接入InputSystem的第一手參考資料。而且目前看來,官方虛擬按鍵和虛擬搖桿已經(jīng)在做了,想必開發(fā)移動端游戲會更加容易。

????這里舉幾個令人興奮的新用途(雖然大部分和XR相關(guān)):
綁定XR跟蹤設(shè)備更加輕松靈活:

UGUI的Input會更加人性化:

輸入?yún)?shù)變成,輸入綁定或輸入資源?:

更多官方插件和第三插件整合InputSystem...
????下一篇,就是本系列的壓軸,InputAction的編輯和使用。
