Interagovatelné – MRTK3
MRTK staví na XRBaseInteractable
sadě nástrojů XR Interaction Toolkit od Unity. Stávající interagovatelné chování a rozhraní API jsou plně podporovány v MRTK a všechny naše vlastní interagovatelné funkce se řídí stávajícím interagovatelným rozhraním API XRI.
Vývojářům, kteří s XRI teprve začíná, důrazně doporučujeme, abyste si nejprve prostudovali dokumentaci k architektuře XRI od Unity.
MrTK nabízí dvě základní třídy, na kterých je možné vytvořit pokročilé interakce, z nichž jedna rozšiřuje druhou, aby bylo možné rozšířit interagovatelné mechanismy zahrnuté v XRI.
MRTKBaseInteractable : XRBaseInteractable
- Tato třída nabízí filtrování a označování příznakem pro různé typy interakcí. I když základní rozhraní XRI
XRBaseInteractable
nerozlišuje mezi typy interakce,MRTKBaseInteractable
poskytuje funkce pro usnadnění kontroly, jestli dochází k běžným typům interakcí. Vlastnosti pro usnadnění, jakoIsGazeHovered
jsou neboIsGrabSelected
jsou zkratky pro dotazování, jestli zúčastněné interagátor implementuje dané rozhraní (odpovídajícím způsobem neboIGazeInteractor
IGrabInteractor
). Tyto příznaky jsou výkonnější než iterace v seznamuinteractorsHovering
nebointeractorsSelecting
. Kromě tohoMRTKBaseInteractable
může filtrovat nebo odmítat určité typy interakcí v případě, že si vývojář přeje vyloučit určité vstupní způsoby.
- Tato třída nabízí filtrování a označování příznakem pro různé typy interakcí. I když základní rozhraní XRI
StatefulInteractable : MRTKBaseInteractable
- I když
MRTKBaseInteractable
přidává příznaky a filtry a vyhýbá se přidávání dalších stavů do interagovatelného, přináší užitečné stavové funkce,StatefulInteractable
jako je přepínání a výběr proměnných.
- I když
Striktní oddělení stavu a vizuálů
V MRTK 2.x byly interaktivní uživatelé často zodpovědní za řízení vlastních vizuálních efektů, ať už jde o kompresi 3D tlačítka, efekt přechodu myší nebo dokonce jen změnu barvy při kliknutí. Omezení tohoto přístupu spočívá v tom, že logika interakce je úzce svázaná s vizuály. Pokud jste chtěli vizuály přepracovat nebo použít jinou velikost, tvar, posunutí atd. samotného skriptu interakce by se museli změnit.
V MRTK3 jsou interagovatelné funkce čistým stavem a interakcí. Interagovatelný objekt nevykresluje žádné vizuální změny ani efekty na základě svého interního stavu. Je to čistě kolekce logiky stavu a interakce, která je vysoce přenosná mezi vizuálními prezentacemi.
Stejný PressableButton
skript lze použít k vytvoření rozverné koule, stisknutelné roviny "trackpadu", nebo abstraktního stisknutelného stroje, který při stisknutí vydává síťové události. Skript PressableButton
se ani nezajímá o to, "kde" je; může být uvnitř plátna nebo na pevném tělese.
K řízení vizuálů se používá samostatný "ovladač vizuálu", který se dotazuje na stav z interagovatelného a vykresluje příslušnou zpětnou vazbu.
StateVisualizer
je doporučená metoda s nízkým kódem pro řízení běžných efektů vizuální zpětné vazby z interagovatelného stavu, ale vývojáři mohou psát vlastní ovladače vizuálů. Například naše komponenty tlačítek obecně používají StateVisualizer
pro pokročilé efekty zpětné vazby založené na 3D + shaderu, ale poskytujeme také příklad BasicPressableButtonVisuals
, který ukazuje, jak lze jednoduchý ovladač vizuálu vytvořit v kódu.
Výběr proměnné
StatefulInteractable
Nejužitečnější dodatečnou funkcí oproti základním funkcím XRI je podpora proměnné Selectedness
. Zatímco základní interagovatelné XRI jsou buď vybrané, nebo nejsou vybrané, mrtk StatefulInteractable
může být libovolný zlomek s plovoucí desetinnou čárkou vybrané.
Tento koncept je užitečný při práci v XR, protože téměř všechny formy vstupu už nejsou binární stavy. Ovladače pohybu mají často analogové triggery (nebo analogové úchyty!), interakce rukou mohou poskytovat proměnlivou "štípnutí", a volumetric press interakce mohou stlačit tlačítko nebo stisknutelnou plochu o různé množství. Tyto proměnné, analogové interakce vidíte všude v XR a MRTK je vybaven tak, aby vývojářům pomáhal vytvářet příjemné interakce nad těmito analogovými vstupy.
Široká škála různých interagátorů a typů interakcí může společně přispívat k celkové možnosti možnosti interakce. Zejména platí, že všechny implementující IVariableSelectInteractor
interagátory přispívají svým analogovým výběrem, obvykle prostřednictvím max()
všech zúčastněných interagátorů. Tato proměnná je kombinována s binárními, ne proměnnými výběry pocházejícími z interagátorů ve stylu vanilky.
U odvozených tříd, jako PressableButton
je , Selectedness()
je funkce přepsána, aby se do výpočtu výběru přidala další "složka". Interagátory, které implementují IPokeInteractor
, můžou přispívat k vybrané poloze na základě své fyzické polohy a toho, jak fyzicky tlačí na interagovatelné. Jiné odvozené třídy mohou zavést jiné, libovolné formy výběru.
Pro interagovatelné funkce, které MRTK poskytuje, Selectedness()
a isSelected
vždy "souhlasí" – jinými slovy, nikdy nebudete pozorovat Selectedness()
větší než SelectThreshold
bez odpovídajícího XRI isSelected
a doprovodného interagátoru v interactorsSelecting
nástroji .
Důležité
Vaše vlastní interagovatelné podtřídy můžou samozřejmě přepsat Selectedness
na jinou hodnotu, která je zcela odpojená od XRI isSelected
. Naše interagovatelné třídy to ale nedělají a důrazně to nedoporučujeme. Obecně platí, že nikdy nezapisujte interakce , které nemají odpovídající interagátor. Výběr XRI bude v drtivé většině případů stačit a všechny vlastní interakce, které vytvoříte, by měly být zapsány jako interagátory.
Když vytváříte vlastní interagovatelný objekt, který podporuje novou metodu určení Selectedness()
, jednoduše přepište metodu a zkombinujte novou vybranou možnost s existujícím množstvím výběru. Pokud používáte StateVisualizer
nebo jakoukoli jinou vizuální vrstvu, která naslouchá výběru proměnných, bude odpovídajícím způsobem reagovat na váš nový typ výběru.
Mapování událostí UGUI na XRI
V některých případech je žádoucí mít interagovatelné uživatele, které reagují na události UGUI, jako je například vstup myši, gamepadu nebo dotykové obrazovky. , UGUIInputAdapter
což je UGUI Selectable
, přijímá události UGUI a předává je do CanvasProxyInteractor
, pokud je k dispozici.
CanvasProxyInteractor
Když je uživatel upozorněn na události UGUI pomocí UGUIInputAdapter
, vydá ekvivalentní akce XRI na příslušné interagovatelné. Mapování mezi vstupem UGUI a akcemi XRI je poněkud ztrátové a je oblastí aktivního vývoje.
Díky tomuto systému můžou stávající interagovatelné prvky XRI, které jsou vytvořeny pro imerzivní platformy, ruce, ovladače pohybu a 3D vstup, stejně dobře reagovat na přístupné 2D ovládací prvky, jako je myš a gamepad.