Sdílet prostřednictvím


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.

Diagram dědičnosti interagovatelných položek

  • 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í, jako IsGazeHovered jsou nebo IsGrabSelected jsou zkratky pro dotazování, jestli zúčastněné interagátor implementuje dané rozhraní (odpovídajícím způsobem nebo IGazeInteractorIGrabInteractor). Tyto příznaky jsou výkonnější než iterace v seznamu interactorsHovering nebo interactorsSelecting. Kromě toho MRTKBaseInteractable 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.
  • 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.

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.

Striktní izolace stavu a vizuálů

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é

StatefulInteractableNejuž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 StatefulInteractablemůž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 PressableButtonje , 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.

Vybraná proměnná

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 interactorsSelectingná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. , UGUIInputAdaptercož je UGUI Selectable, přijímá události UGUI a předává je do CanvasProxyInteractor, pokud je k dispozici.

Tok adaptéru UGUI

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.