Volumetrické uživatelské rozhraní s plátnem – MRTK3
Poznámka
Toto je koncepční přehled způsobu sestavení hybridního uživatelského rozhraní založeného na plátně. Dokumentaci k jednotlivým předfabám uživatelského prostředí najdete v dokumentaci ke komponentám uživatelského rozhraní.
MRTK3 představuje volumetrické uživatelské rozhraní, které je integrované se systémem Unity RectTransform a Canvas. I když se tento systém v minulosti primárně používal pro 2D ploché uživatelské rozhraní, je schopen vykreslovat a rozkládat objemové 3D uživatelské rozhraní. To může urychlit iteraci návrhu a zvýšit věrnost návrhů, které lze vytvořit pomocí volumetrického uživatelského rozhraní.
Poznámka
Knihovna komponent založená na plátně je v aktivním vývoji a bude se rychle měnit díky novým funkcím, vzhledu a chování, rozložení a architektuře.
Systémy uživatelského rozhraní MRTK 2.x bez plátna bylo velmi obtížné navrhnout, protože postrádaly mnoho základních funkcí očekávaných od systému návrhu rozhraní.
- ✘ Nedostatek nefyziky konstrukčních jednotek
- ✘ Bez zarovnání
- ✘ Bez okraje nebo odsazení
- ✘ Žádná flexibilní nebo responzivní rozložení
- ✘ Jedinečné prefaby pro každou jednotlivou permutaci rozložení, velikosti a konfigurace
- ✘ Velmi omezená podpora rozložení kolekce (vodorovná/svislá kompozibilní rozložení)
- ✘ Nedostatek základních konstrukčních prvků, jako jsou zaoblené rohové poloměry nebo šířky tahů
- ✘ Je potřeba použít měřítko k úpravě velikostí prvků uživatelského rozhraní, které destruktivně mění děti
- ✘ Omezená podpora myši a klávesnice
- ✘ Pro gamepad není podporována
V důsledku těchto omezení bylo volumetrické uživatelské rozhraní historicky primitivnější ve svém návrhu a vyžadovalo velké množství ruční práce od technických návrhářů, aby vytvořili krásná rozložení.
MRTK3 zavádí jednotný přístup. Krásné ovládací prvky volumetrického uživatelského rozhraní, které podporují všechny interakce XR (jako jsou artikulované stisknutí sledování rukou a štípnutí pohledu), mohou být vytvořené v Canvas-RectTransform kontextu. Ovládací prvky lze automaticky rozkládat se správným okrajem, odsazením, pružnou odezvou a všemi funkcemi, které návrháři očekávají. Kromě toho můžeme směrovat události UGUI dolů do XRI, aby přesně stejné prefaby uživatelského rozhraní fungovaly stejně dobře napříč 2D kontexty i 3D, včetně přístupných vstupů, jako je gamepad.
Nabízí například tyto výhody:
- ✔ Flexibilní jednotky návrhu, které se mapují na různé fyzické kontexty (3D realita, 2D obrazovky, televize, stolní počítač, mobilní zařízení nebo web)
- ✔ Úplná podpora zarovnání RectTransform pro responzivní rozložení s kohezivními vztahy mezi nadřazenými a podřízenými objekty
- ✔ Úplná podpora okrajů a odsazení RectTransform prostřednictvím skupin automatického potvrzení UnityUI
- ✔ Podpora flexibilních rozložení s prioritou a okraji prostřednictvím skupin automatického dodržování UnityUI
- ✔ Jeden prefab pro každý typ ovládacího prvku, jehož velikost je možné změnit a upravit tak, aby vyhovoval jakémukoli obsahu nebo kontextu.
- ✔ Rozložení vodorovné, svislé a mřížky ze skupin automatického ukládání UnityUI Vlastní rozložení jsou možná prostřednictvím rozšíření rozhraní rozložení Unity.
- ✔ Široká škála pokročilých funkcí návrhu, jako jsou zaoblené rohové poloměry s absolutní velikostí, šířky tahů a okraje, které umožňují pokročilé funkce shaderu uživatelského rozhraní v balíčku Mixed Reality Graphics Tools.
- ✔ Bez škálování: Veškeré nastavení velikosti a rozložení se dosahuje pomocí metrik velikosti a posunu funkce RectTransform. Rodiče nešupinují děti.
- ✔ Plná podpora pro myš a klávesnici, nativně prostřednictvím událostí UGUI a
UGUIInputAdapter
aCanvasProxyInteractor
( další informace najdete v dokumentaci k interagovatelné architektuře) - ✔ Podpora pro gamepad a směrovou/relativní navigaci
Tento výkon a flexibilita může být nákladná a uživatelské rozhraní založené na plátně vyžaduje pečlivou správu, aby se zabránilo běžným nástrahám výkonu.
- Každá "pohyblivá část" uživatelského rozhraní by měla být odlišným uzlem plátna. S mutací hierarchií plátna jsou
O(tree_height)
spojené náklady. Důrazně se doporučuje používat více plátna pro více pohyblivých částí nebo opakovaně použitelných komponent. - Nepoužívejte jedno globální plátno pro celou scénu.
- Přesun a otáčení plátna a rectTransforms může mít vliv na výkon. Důrazně doporučujeme vnořit plátno pod transformací "pouzdra", která není rectTransform, která se přesune, místo přímého přesunu plátna.
- Náš příběh o maskování a vystřihování uživatelských rozhraní založených na koliéru je stále ve vývoji. Zvažte možnost vyhnout se zobrazením posouvání, která obsahují obsah, na který lze kliknout.
- Výchozí směrový navigační systém Unity se může v některých 3D kontextech chovat podivně. Zkoumáme vlastní navigační systémy, které se budou chovat robustněji v neobvyklých 3D rozloženích.
Vydáme konkrétnější doprovodné materiály k optimalizaci rozložení založených na plátně, protože budeme provádět podrobnější testování výkonu na celé řadě zařízení.
Nastavení
Naše komponenty jsou vytvořené s 1 jednotkou návrhu : 1mm poměrem pro fyzické kontexty. Když nastavíte plátno pro použití s volumetrickými uživatelskými rozhraními určenými pro zobrazení v imerzivních 3D aplikacích:
- Ujistěte se, že vaše plátno je worldspace.
- Ujistěte se, že měřítko plátna je globálně 0,001 na všech osách.
U aplikací, které vykreslují 2D displej, je možné měřítko volně upravit tak, aby odpovídalo zadaným metrikám použitelnosti a minimálním cílovým velikostem dotykového ovládání.
Pokud používáte interagovatelné objekty UGUIInputAdapter
(jako je naše uživatelské prostředí založené na plátně), ujistěte se, že máte ve scéně na (nejlépe prázdném CanvasProxyInteractor
) objektu GameObject. Tím se události UGUI budou předávat prostřednictvím XRI a zajistí se, že vaše interagovatelné objekty budou správně fungovat.
Pokud chcete experimentovat se vstupem UGUI na jiných komponentách než UX, přidejte UGUIInputAdapter
do XRI interagovatelné. Vstup UGUI pro interagovatelné objekty, které nesouvisely s uživatelským prostředím, jsou experimentální a podléhají několika otevřeným chybám.
Průběžný vývoj
Stále formujeme vývojový příběh pro vytváření krásného uživatelského rozhraní na různých podporovaných platformách. V současné době stále dodáváme dvě verze většiny komponent uživatelského prostředí: jednu, která nepoužívá Plátno se statickým, nereagujícím rozložením (jak jsme v MRTK 2.x historicky poskytovali) a další verzi, která je vytvořená s naším jednotným přístupem založeným na plátně. Vzhledem k tomu, že vytváříme další komponenty a vytváříme implementaci knihovny návrhů, očekáváme, že v zájmu konzistence a údržby vyřadíme komponenty, které nejsou součástí plátna.
Sjednocená správa stavu
Vzhledem k přísnému oddělení stavu a interakce a vizuálů si všimnete, že stejné skripty stavu a interakce jsou sdíleny napříč kontexty plátna a kontexty, které nejsou plátnem. To je záměrně; stejné skripty pro interakci je možné opakovaně používat v jakémkoli kontextu vizuálů nebo rozložení, což snižuje plochu rozhraní API a zlepšuje konzistenci našich interakcí. Je například Slider
komponenta interakce posuvníku pro posuvníky Plátno i jiné než plátno a PressableButton
je to stejný skript pro tlačítka Plátno i tlačítka bez plátna. Pokud v budoucnu přijmeme nové rozložení nebo prezentační architekturu, můžeme přenést stejnou logiku a systémy interakce, abychom zajistili konzistenci a udržovatelnost.
Následující diagram architektury podrobně popisuje, jak různé vstupní události a typy interagovatelných možností spolupracují, aby zajistily jednotný stav interakce. Kliknutím na diagram zobrazíte větší verzi.