BoundsControl – MRTK3
BoundsControl poskytuje ohraničující rámeček s automatickou velikostí a manipulací s možnostmi pro otáčení a škálování.
V MRTK 2.x se BoundsControl generoval hlavně za běhu pomocí konfigurace ScriptableObjects. V MRTK3 se nastavení a přizpůsobení BoundsControl výrazně zjednodušilo. Vizuály a popisovače hranic jsou jednoduše přizpůsobitelným prefabem, který BoundsControl vytvoří instanci za běhu. Vývojáři můžou upravovat a přizpůsobovat předem připravené vizuály nebo dokonce vytvářet vizuály s novými hranicemi úplně od začátku. Poskytujeme implementace vizuálů se standardními hranicemi, které následují po novém jazyce Mixed Reality Design Language.
Nové vizuály nabízejí zjednodušenou vizuální zpětnou vazbu, která ilustruje záměr uživatele a manipulaci s objektem s minimálním rušivým vizuálním šumem.
Nastavení
Jednoduše přidejte BoundsControl do existujícího objektu BoundsVisualsPrefab
a naplňte odkaz vizuály bounds, které chcete použít. Nabízíme několik předdefinovaných vizuálů s hranicemi, které můžete použít.
Důležité
Důrazně doporučujeme, aby vývojáři přidali MinMaxScaleConstraint , aby zabránili uživateli ve škálování objektu na nepoužitelně malou nebo velkou velikost.
Pokud chcete použít záměr a efekty fokusu ohraničených vizuálů, musíte mít na objektu objekt StatefulInteractable
. Pokud se interaktivně nezjistí automaticky, můžete připojení zadat v inspektoru BoundsControl.
Poznámka
Doporučujeme vývojářům používat ObjectManipulator společně s BoundsControl , aby uživatelům kromě manipulace na základě cen nabídli přímou manipulaci. ObjectManipulator může sloužit jako StatefulInteractable
pro stavy přechodu myší nebo fokusu, na které vizuály hranic reagují.
Předfaby vizuálů Bounds
Nabízíme několik předdefinovaných vizuálů s hranicemi pro použití s BoundsControl. Vývojářům se doporučuje vytvářet předběžné varianty těchto vizuálů a přizpůsobovat je tak, aby vyhovovaly jejich potřebám. Animace a stavy popisovačů využívají StateVisualizer, což vývojářům umožňuje dále přizpůsobit vzhled a chování cenových nabídek.
Styl popisovače okluze
Tyto vizuály s hranicemi nabízejí zjednodušený vizuální návrh s menším množstvím rušivých prvků pro uživatele. Budou viditelné pouze příslušné úchyty podél okrajů hranic. Vizuály s hranicemi zhoršují, rozšiřují a mění barvu nebo tloušťku v závislosti na záměru uživatele a průběhu výběru. Důrazně doporučujeme použít tento vizuální styl ohraničení.
Pouze záměr
V některých kontextech můžou být popisovače nežádoucí a vývojáři můžou chtít jako příjemný indikátor záměru uživatele použít samotné vizuály ohraničení. I když tento prefab provádí úlohu, stejného efektu lze dosáhnout s libovolným jiným vizuálem hranic výběrem HandleType.None. Zjistili jsme, že vizuály s stísněnými hranicemi jsou uspokojivým a příjemným prvkem vizuální zpětné vazby pro mnoho různých kontextů, nejen pro manipulaci na základě popisovačů.
Starší styl
Tyto vizuály s hranicemi zobrazují všechny úchyty a okraje rámečku. To více odpovídá staršímu jazyku návrhu a předchozímu chování v MRTK 2.x; tento návrh však může být pro uživatele více rušivý kvůli zbytečnému vizuálnímu šumu. Kromě toho může přítomnost úchytů, které jsou před objektem (a za), způsobit problémy s nepřímou manipulací se stažením pohledu. Nedoporučujeme používat tento styl pro nové aplikace, zejména pro ty, které využívají zaměření pohledem.
Návrh interakce
V aktuální iteraci nabízíme jednoduchou interakci aktivace/deaktivace. Kliknutím na hranice (jinými slovy, výběrem objektu, nepřesunutím a uvolněním) lze úchyty zapínat a vypínat. Tolerance vzdálenosti pro tuto kontrolu lze upravit pomocí DragToggleThreshold
a samotné chování aktivace lze povolit nebo zakázat pomocí ToggleHandlesOnClick
vlastnosti .
Popisovače lze kdykoli ručně aktivovat nebo deaktivovat z kódu nastavením HandlesActive
.
Automatický výpočet mezí
BoundsControl se pokusí automaticky vypočítat hranice přidruženého objektu. Pokud je požadován určitý obrazec ohraničení, zaškrtněte OverrideBounds
tuto možnost a určete objekt bounds přímo. Systém výpočtu hranic vypočítá pouze hranice pro zadaný objekt přepsání.
Algoritmus BoundsCalculationMethod
má vliv na to, jak algoritmus počítá hranice. Pokud se vizuální tvar uzavřeného objektu nemusí nutně shodovat s s colliderem nebo je tomu naopak, mohou vývojáři upravit metodu výpočtu tak, aby upřednostnily použití hranic rendereru nebo s collideru nebo kombinace obojího.
Bez ohledu na metodu Padding
výpočtu bude možnost vyčíslovat hranice jednotně ve světových jednotkách. Při zploštělování hranic není zploštěná osa.
Sloučení
BoundsControl lze použít také pro manipulaci s 2D obsahem. Pokud FlattenMode
je nastavena na Auto
, BoundsControl se zplotí na 2D obdélníkové hranice, pokud je objekt dostatečně plochý podél jakékoli osy. Pokud objekt není dostatečně plochý, ale přesto byste chtěli obdélníkové ohraničení dovolování, FlattenMode.Always
vždy zploštělí BoundsControl podél nejhubenější osy. Naopak, FlattenMode.Never
zabrání BoundsControl zploštět, i když je objekt velmi tenký.
Možnosti manipulace
Chování při manipulaci BoundsControl lze upravit několika způsoby. Možnost RotateAnchor
určuje bod otáčení, kolem kterého se BoundsControl otáčí při použití možností otočení. Body otáčení některých objektů jsou daleko od jejich vizuálního středu, což může způsobit nepohodlí a nepřesnosti při manipulaci s úchyty pro otáčení. Určení BoundsCenter
pro RotateAnchor
způsobí, že BoundsControl bude vždy otáčet kolem geometrického středu počítaných mezí místo skutečného původu objektu.
Chování škálování je možné nastavit na nebo Uniform
Non Uniform
. V jednotném režimu jsou všechny osy objektu škálovány dohromady, aby se zachoval poměr stran a vzhled. Nerovnoměrné měřítko umožňuje změnit měřítko každé osy objektu nezávisle na sobě.