?
輸入系統(tǒng)(術(shù)語(yǔ))
在MRTK提供的所有功能中,輸入系統(tǒng)是最大的系統(tǒng)之一。工具箱中的許多東西都是在它之上構(gòu)建的(指針、焦點(diǎn)、預(yù)設(shè))。輸入系統(tǒng)中的代碼允許在跨平臺(tái)之間進(jìn)行自然交互,比如抓取和旋轉(zhuǎn)。
我們?cè)谶@里說(shuō)明一些有價(jià)值的術(shù)語(yǔ):
數(shù)據(jù)源(Data providers)
在輸入配置文件中對(duì)輸入數(shù)據(jù)提供者的一個(gè)引用——換句話說(shuō)它是輸入設(shè)備的管理器。這個(gè)組件的作用是把底層系統(tǒng)的輸入數(shù)據(jù)橋接成MRTK所使用的輸入數(shù)據(jù)。其中一個(gè)例子是Windows混合現(xiàn)實(shí)(Windows Mixed Reality)的適配,它的工作是把通過(guò)Windows混合現(xiàn)實(shí)(Windows Mixed Reality)api輸入的數(shù)據(jù)轉(zhuǎn)化為MRTK所使用的輸入數(shù)據(jù)。另外一個(gè)例子是OpenVR適配(它的工作室通過(guò)OpenVR api 得到輸入動(dòng)作并轉(zhuǎn)化為MRTK所接受的數(shù)據(jù))。
控制器(Controller)
物理控制器的抽象(包括所有的六軸手柄,HoloLens 1提供的空間手柄,全關(guān)節(jié)的手部捕捉器或者Leap Motion等等輸入設(shè)備)??刂破髋缮谠O(shè)備管理器(比如,一個(gè)WMR(windows混合現(xiàn)實(shí))設(shè)備管理器會(huì)捕捉一個(gè)全關(guān)節(jié)的手,并管理他的生命期)
指針(Pointer)
控制器會(huì)通過(guò)指針來(lái)與游戲?qū)ο螅╣ame objects)進(jìn)行交互。例如近距離交互指針,可以通過(guò)檢測(cè)手(既控制器)何時(shí)靠近其宣稱自己支持的“近距離交互”對(duì)象。隔空指針或者遠(yuǎn)距離指針(比如遠(yuǎn)距離射線指針),可以幫助我們處理超過(guò)我們手臂長(zhǎng)度的遠(yuǎn)距離內(nèi)容。
指針由設(shè)備管理器創(chuàng)建,然后附加到輸入源。要獲取控制器的所有指針,請(qǐng)執(zhí)行以下操作:controller.InputSource.Pointers。
?

?
注意,一個(gè)控制器可以同時(shí)擁有許多不同的指針。但是為了確保操作順利,在某一時(shí)刻只有一個(gè)指針會(huì)被激活(比如,中距離指針的使用會(huì)組織近距離指針)。以確保這不會(huì)陷入混亂中,有一個(gè)指針中介控制指針允許活躍(例如,近距離指針被激活的時(shí)候,遠(yuǎn)距離指針將會(huì)被關(guān)閉)。
焦點(diǎn)(Focus)
指針的事件將被發(fā)送給焦點(diǎn)對(duì)象。不同的指針類型將提供不同的焦點(diǎn)選擇方案,比如手指戳的指針會(huì)通過(guò)一個(gè)球體的碰撞來(lái)選擇焦點(diǎn),而一個(gè)遠(yuǎn)距離的射線指針將會(huì)通過(guò)一個(gè)線來(lái)檢測(cè)接收的焦點(diǎn)對(duì)象。所有焦點(diǎn)對(duì)象必須實(shí)現(xiàn)IMixedRealityFocusHandler接口來(lái)觸發(fā)。我們也可以注冊(cè)一個(gè)全局對(duì)象來(lái)接受所有指針事件,但我們?cè)谶@里不推薦使用這種方法。
更新焦點(diǎn)對(duì)象的組件是FocusProvider。
光標(biāo)(Cursor)
與指針關(guān)聯(lián)的實(shí)體,它在指針交互周圍提供額外的視覺(jué)提示。例如,手指光標(biāo)會(huì)在你的手指周圍呈現(xiàn)一個(gè)圓環(huán),當(dāng)你的手指接近“接近可交互”的物體時(shí),圓環(huán)可以旋轉(zhuǎn)。一個(gè)指針同時(shí)只能和一個(gè)光標(biāo)關(guān)聯(lián)相關(guān)聯(lián)。
交互和操作(Interaction and Manipulation)
對(duì)象可以使用交互或操作腳本進(jìn)行標(biāo)記(這可能是Interactable.cs 或者NearInteractionGrabbable.cs / ManipulationHandler.cs)。
例如,NearInteractionGrabbable 和NearInteractionTouchable 允許某些指針(特別是靠近交互指針的指針)知道可以將焦點(diǎn)放在哪些對(duì)象上。
Interactable 和ManipulationHandler,這些組件,它們偵聽(tīng)指針事件來(lái)影響移動(dòng)/縮放/旋轉(zhuǎn)游戲?qū)ο蟮目梢暬憩F(xiàn)。