最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

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

2019-06-27 00:09 作者:YouSing  | 我要投稿

一、為什么重點講InputAction?

????其實Unity有不少預(yù)覽包,總是會出現(xiàn)一種功能,有多種調(diào)用方式。InputSystem的官方例子(在InputSystem/Assets/Demo/SimpleDemo/文件夾下),也列舉幾種檢測輸入的例子。有一定代碼能力的小伙伴,基本沒什么壓力。除了上一篇的直接查詢設(shè)備狀態(tài)外,個人覺得最突出的還是基于InputAction的全新輸入事件系統(tǒng)。不僅提供全新的InputActionAsset,而且整個方案中,大部分可供開發(fā)者編輯的要素還是InputAction。

二、怎么編輯InputAction?

????讓我們打開一個InputActionAsset文件,如Packages/com.unity.inputsystem/InputSystem/Plugins/PlayerInput/DefaultInputActions.inputactions。這里會接觸幾個新名詞,如InputActionMap(InputAction的集合)、InputControlScheme(用于篩選InputControl)、InputBinding(用于綁定InputAction和InputControl)等。

????①管理InputControlScheme和用InputControlScheme篩選InputControl;

????②篩選輸入設(shè)備;

????③InputActionMap的編輯列表;

????④選中的InputActionMap對應(yīng)的InputAction編輯列表;

????⑤選中的InputAction或InputBinding的編輯界面;

????現(xiàn)在應(yīng)該可以了解整套InputActionAsset的作用:保存多個InputActionMap(不同使用場景),InputActionMap用于檢索InputAction(具體的行為),InputAction用于表示該行為由什么InputControl(輸入源)觸發(fā),InputBinding作為InputAction和InputControl連接的橋梁,InputControlScheme用于篩選InputControl。

????目前我發(fā)現(xiàn)代碼引用InputAction的方式有三種:

????1.聲明InputAction字段,然后在Inspector面板上編輯;

????2.聲明InputActionReference字段,然后選擇InputActionAsset文件的子資源InputActionReference;

????3.直接代碼創(chuàng)建InputAction,也是之前說的強大的字符串反序列化功能;

public InputAction(string name = null, string binding = null, string interactions = null, string processors = null, string expectedControlLayout = null);

????第一種和第二種比較適合開發(fā)者編輯,而且無論是你在代碼聲明InputAction,還是在InputActionAsset→InputActionMap新建一個InputAction,操作都是一樣的。

????1.選擇InputAction,按下+按鍵,選擇你要添加的綁定類型(簡單、一軸混合,二軸混合):

????2.選擇新建的InputBinding,在Binding→Path選擇想要偵聽的InputControl:

????3.在Interactions添加InputAction觸發(fā)模式,然后編輯Interaction(可選):

具體操作請參考例子和文檔
這里為按下和彈起會觸發(fā)事件

????4.在Processors添加InputAction返回值的修飾操作,然后編輯Processor(可選):

具體操作請參考例子和文檔
這里限定回調(diào)數(shù)值在0~1之間

????5.最后得到一個關(guān)于開火的InputAction,同時一個InputBinding可以有零個或多個Interaction和Processor。想增加更多InputBinding,重復(fù)1~4步驟即可:

三、怎么使用InputAction?

????我們已經(jīng)可以自己創(chuàng)建和獲取InputAction了,那么具體怎么用呢?其實InputAction有三個事件回調(diào)步驟,分別為started(開始)、performed(執(zhí)行)、canceled(取消),需要查閱文檔來了解不同Interaction的回調(diào)情況。我這邊以剛才編輯的InputAction為例:

????1.新建一個MonoBehaviour腳本,獲取InputAction,可以是從InputActionAsset查閱獲取,直接引用,或手動創(chuàng)建;

????2.在Start函數(shù)注冊回調(diào)事件,并啟用InputAction:

void Start(){

????//...

????if(inputAction!=null){

????????inputAction.performed+=OnPerformed;

????????inputAction.Enable();

????}

}

? ? 3.在Destroy函數(shù)反注冊回調(diào)函數(shù),并禁用InputAction:

void OnDestory(){

????//...

????if(inputAction!=null){

????????inputAction.performed-=OnPerformed;

????????inputAction.Disable();

????}

}

????4.在回調(diào)函數(shù)處理Input事件:

void OnPerformed(InputAction.CallbackContext ctx){

????if(ctx.ReadValue<float>()<0.25f) {

????????print("Fire is Released!!!");

????}else {

????????print("Fire is Pressed!!!");

????}

}

????5.回到Unity編輯器,點擊Play,看看是否運行成功:

OK,收工

????可能有人注意到了,光是一個InputAction需要做的工作有點麻煩,使用多個InputAction不就累死。還記得上一篇說到的InputActionAsset的自動生成C#類,就是幫你生成一個幫助類。它幫你注冊和反注冊的工作都做了,而且還聲明一個接口,讓你實現(xiàn)對不同InputAction的處理。

一些自動生成代碼,只顯示其中一部分
你的代碼只需實現(xiàn)這個接口即可

四、一些題外話

????由于本人上一家公司的主業(yè)還是研發(fā)XR設(shè)備的,所以本系列文章有點XR設(shè)備怎么怎么著。如果Unity在2015年就推出InputSystem的正式版,我想我那家公司的SDK的開發(fā)人員會減少一半以上,而且我也能少受罪。其實我連UE4的輸入SDK都搞過,但整體的開發(fā)體驗不是很好。SteamVR雖說是一個很好VR設(shè)備兼容方案,但是它不支持安卓端(如一體機)。而Unity的InputSystem簡直不能再好用了,原生庫上封裝一個Layout,完事。

????目前XR設(shè)備研發(fā),還是處于低潮期,所以我可能不會講第三方硬件接入InputSystem。而且如果有熟讀C#能力的話,其實就是照著葫蘆畫瓢?,F(xiàn)在大部分大廠都已經(jīng)在渲染端和Unity完成整合(之后可以用LWRP),而廠家的SDK都是提供一些輸入接口和工具庫。等InputSystem推出正式版,除了一些特殊功能外,那基本沒有廠家的SDK什么事了。

????但是不管XR發(fā)展如何,我覺得還是要把一些積累的開發(fā)經(jīng)驗分享出來。畢竟如果一聲不吭就跑去賣炒面,那么有愧于那些還在XR開發(fā)中打滾的老鐵們。雖然到了現(xiàn)在還是想吐槽老東家,但畢竟也受到其不少照顧,做人要厚道。雖然因為正式版未發(fā)表(還有我懶),只講了皮毛,但希望這些文章能給那些被輸入SDK折磨的Unity開發(fā)者一些幫助。下一篇就是外傳,分享如何開發(fā)多平臺VR的經(jīng)驗了。YouSing,我們走(喂~感覺哪里不對勁)。

Unity新輸入方案InputSystem介紹-(二)的評論 (共 條)

分享到微博請遵守國家法律
内乡县| 麦盖提县| 天长市| 亚东县| 巴彦县| 阿鲁科尔沁旗| 夹江县| 喀喇| 白玉县| 临夏县| 万宁市| 嵊泗县| 赤峰市| 云南省| 金昌市| 吉水县| 时尚| 罗山县| 阳高县| 蓬安县| 香格里拉县| 托里县| 蒙阴县| 教育| 天峨县| 化德县| 炎陵县| 西乌珠穆沁旗| 阜新| 历史| 乳源| 嫩江县| 龙州县| 库尔勒市| 石城县| 文安县| 洞头县| 洪江市| 合阳县| 婺源县| 安乡县|