Ovládací prvek Vazby – MRTK2
BoundsControl je nová komponenta pro chování při manipulaci, která byla dříve nalezena v BoundingBoxu. Ovládací prvek Hranice přináší řadu vylepšení a zjednodušení při nastavování a přidává nové funkce. Tato součást je náhradou za ohraničující rámeček, který bude zastaralý.
Skript BoundsControl.cs
poskytuje základní funkce pro transformaci objektů v hybridní realitě. Ovládací prvek ohraničení zobrazí kolem hologramu pole, které značí, že může být interagováno. Úchyty na rozích a okrajích pole umožňují škálování, otáčení nebo překládání objektu. Ovládací prvek hranic také reaguje na uživatelský vstup. Na HoloLens 2 například ovládací prvek hranic reaguje na blízkost prstu a poskytuje vizuální zpětnou vazbu, která pomáhá vnímat vzdálenost od objektu. Všechny interakce a vizuály je možné snadno přizpůsobit.
Příklad scény
Příklady konfigurací ovládacích prvků hranic najdete ve BoundsControlExamples
scéně.

Vlastnosti inspektoru
Cílový objekt
Tato vlastnost určuje, který objekt se transformuje manipulací s ovládacími prvky hranic. Pokud není nastavený žádný objekt, nastaví se jako výchozí objekt vlastníka.
Chování aktivace
Existuje několik možností aktivace rozhraní ovládacích prvků hranic.
- Aktivovat při spuštění: Ovládací prvek Vazby se zobrazí po spuštění scény.
- Aktivovat podle blízkosti: Ovládací prvek Ohraničení se zobrazí, když je artikulovaná ruka blízko objektu.
- Aktivovat ukazatelem: Ovládací prvek Ohraničení se zobrazí, když je zacílený ukazatelem rukou.
- Aktivovat podle blízkosti a ukazatele: Ovládací prvek Ohraničení se zobrazí, když je zacílený ukazatelem rukou nebo artikulovanou rukou je blízko objektu.
- Aktivovat ručně: Ovládací prvek Vazby se automaticky nezobrazuje. Můžete ho ručně aktivovat prostřednictvím skriptu tak, že se dostanete k boundsControl.Active vlastnost.
Přepsání hranic
Nastaví kolizní pole z objektu pro výpočet hranic.
Odsazení krabic
Přidá odsazení do kolidových hranic použitých k výpočtu rozsahů ovládacího prvku. To ovlivní nejen interakci, ale také vliv na vizuály.
Zploštěná osa
Určuje, jestli je ovládací prvek zploštěný v jedné z os, takže je 2 rozměrové a znevolňuje manipulaci podél této osy. Tuto funkci lze použít pro tenké objekty, jako jsou slates. Pokud je zploštěná osa nastavená na zploštěné automatické zploštění , skript automaticky vybere osu s nejmenším rozsahem jako zploštěnou osu.
Vyhlazování
Oddíl vyhlazování umožňuje konfigurovat chování vyhlazování pro škálování a otáčení ovládacího prvku.
Vizuály
Vzhled ovládacího prvku ohraničení lze nakonfigurovat úpravou jedné z odpovídajících konfigurací vizuálů. Konfigurace vizuálů jsou propojené nebo vložené skriptovatelné objekty a podrobněji jsou popsány v části objektu konfigurace.
Objekty konfigurace
Ovládací prvek se dodává se sadou konfiguračních objektů, které lze uložit jako skriptovatelné objekty a sdílet mezi různými instancemi nebo prefabs. Konfigurace se dají sdílet a propojit buď jako jednotlivé skriptovatelné soubory prostředků, nebo vnořené skriptovatelné prostředky uvnitř předfabů. Další konfigurace lze také definovat přímo v instanci bez propojení s externím nebo vnořeným skriptovatelným assetem.
Kontrolor hranic bude indikovat, jestli je konfigurace sdílená nebo vložená jako součást aktuální instance, a to zobrazením zprávy v inspektoru vlastností. Kromě toho sdílené instance nebudou možné upravovat přímo v okně vlastností ovládacího prvku hranic, ale místo toho musí být prostředek, na který odkazuje, přímo modfied, aby se zabránilo náhodným změnám ve sdílených konfiguracích.
Ovládací prvek v současné době nabízí možnosti konfiguračních objektů pro následující funkce:
Konfigurace boxu
Konfigurace boxu zodpovídá za vykreslení plného rámečku s hranicemi definovanými přes velikost koladéru a odsazení rámečku. Můžete nastavit následující vlastnosti:
- Materiál rámečku: definuje materiál použitý na vykreslené pole, když nedojde k žádné interakci. Pole bude vykresleno pouze v případě, že je tento materiál nastavený.
- Box grabbed material: material for the box when the user interact with the control by grabbing via near or far interaction.
- Měřítko zobrazení zploštěné osy: měřítko použité na displej pole, pokud je jedna z os zploštěna.
Konfigurace škálovacích úchytů
Tato zásuvka vlastností umožňuje upravit chování a vizualizaci úchytů měřítka ovládacího prvku hranic.
- Materiál úchytu: materiál použitý na úchyty.
- Rukojeť chycený materiál: materiál použitý na úchyt.
- Zpracování předfab: volitelné prefab pro úchyt pro škálování. Pokud není nastavena sada MRTK, použije datovou krychli jako výchozí.
- Velikost úchytu: velikost úchytu měřítka
- Odsazení sbalení: odsazení, které se přidá do sbalení úchytu.
- Nakreslete tether při manipulaci: když aktivní nakreslí tether čáru od bodu zahájení interakce na aktuální pozici ruky nebo ukazatele.
- Obslužné rutiny ignorují kolidér: pokud se sem propojí kolač, obslužné rutiny budou ignorovat všechny kolize s tímto kolizí.
- Popisovač předfabem: prefab, který se má použít pro úchyt, když je ovládací prvek zploštěný.
- Zobrazit úchyty škálování: řídí viditelnost úchytu.
- Chování škálování: Je možné nastavit jednotné nebo ne uniformní škálování.
Obměná rutina konfigurace
Tato konfigurace definuje chování úchytu pro otáčení.
- Materiál úchytu: materiál použitý na úchyty.
- Rukojeť chycený materiál: materiál použitý na úchyt.
- Popisovač prefab: volitelné prefab pro úchyt. Pokud není nastavena sada MRTK, použije jako výchozí sféru.
- Velikost úchytu: velikost úchytu.
- Odsazení sbalení: odsazení, které se přidá do sbalení úchytu.
- Nakreslete tether při manipulaci: když aktivní nakreslí tether čáru od bodu zahájení interakce na aktuální pozici ruky nebo ukazatele.
- Obslužné rutiny ignorují kolidér: pokud se sem propojí kolač, obslužné rutiny budou ignorovat všechny kolize s tímto kolizí.
- Popisovač typu kolab: typ kolatoru, který se má použít s vytvořeným úchytem.
- Zobrazit úchyt pro X: určuje viditelnost úchytu pro osu X.
- Zobrazit úchyt pro Y: určuje viditelnost úchytu pro osu Y.
- Zobrazit úchyt pro Z: řídí viditelnost úchytu osy Z.
Konfigurace překladových úchytů
Umožňuje povolení a konfiguraci popisovačů překladu pro ovládací prvek hranic. Všimněte si, že obslužné rutiny překladu jsou ve výchozím nastavení zakázané.
- Materiál úchytu: materiál použitý na úchyty.
- Rukojeť chycený materiál: materiál použitý na úchyt.
- Popisovač prefab: volitelné prefab pro úchyt. Pokud není nastavena sada MRTK, použije jako výchozí sféru.
- Velikost úchytu: velikost úchytu.
- Odsazení sbalení: odsazení, které se přidá do sbalení úchytu.
- Nakreslete tether při manipulaci: když aktivní nakreslí tether čáru od bodu zahájení interakce na aktuální pozici ruky nebo ukazatele.
- Obslužné rutiny ignorují kolidér: pokud se sem propojí kolač, obslužné rutiny budou ignorovat všechny kolize s tímto kolizí.
- Popisovač typu kolab: typ kolatoru, který se má použít s vytvořeným úchytem.
- Zobrazit úchyt pro X: určuje viditelnost úchytu pro osu X.
- Zobrazit úchyt pro Y: určuje viditelnost úchytu pro osu Y.
- Zobrazit úchyt pro Z: řídí viditelnost úchytu osy Z.
Konfigurace propojení (wireframe)
Konfigurace propojení umožňuje funkci drátového rámce ovládacího prvku ohraničení. Můžete nakonfigurovat následující vlastnosti:
- Materiál drátového rámce: materiál použitý na drátěnou síť.
- Poloměr hrany drátového rámce: tloušťka drátového rámce.
- Tvar drátového rámce: tvar drátového rámce může být krychlový nebo válcový.
- Zobrazit drátový model: řídí viditelnost drátového rámce.
Konfigurace efektu blízkosti
Umožňuje zobrazit a skrýt úchyty s animací na základě vzdálenosti k rukou. Má dvoustupňovou animaci škálování. Výchozí hodnoty jsou nastavené na chování stylu HoloLens 2.

- Aktivní efekt blízkosti: Povolení aktivace popisovače založeného na blízkosti
- Střední vzdálenost objektu: Vzdálenost pro měřítko 1. kroku
- Blízkost objektu: Vzdálenost pro měřítko 2. kroku
- Far Scale: Výchozí hodnota měřítka prostředku úchytu, pokud jsou ruce mimo rozsah interakce ovládacích prvků ohraničení (vzdálenost definovaná nad hodnotou Popisovač střední vzdálenosti). Použití 0 ke skrytí úchytu ve výchozím nastavení)
- Střední měřítko: Hodnota měřítka prostředku úchytu, pokud jsou ruce v rozsahu interakce ovládacích prvků ohraničení (vzdálenost definovaná nad popisovačem blízkosti). Použití 1 k zobrazení normální velikosti)
- Zavřít měřítko: Hodnota měřítka prostředku úchytu, pokud jsou ruce v rozsahu interakce s úchytem (vzdálenost definovaná výše pomocí popisovače blízkosti). Použití 1.x k zobrazení větší velikosti)
- Far Grow Rate: Ohodnoťte měřítko vzdálenosti škálovaného objektu, když se ruka přesune ze střední do vzdálené vzdálenosti.
- Střední míra růstu: Ohodnoťte měřítko vzdálenosti škálovaného objektu, když se ruka přesune ze střední na blízkost.
- Close Grow Rate: Ohodnoťte měřítko škálovaného objektu, když se ruka přesune z blízké blízkosti k centru objektů.
Systém omezení
Ovládací prvek Vazby podporuje použití správce omezení k omezení nebo úpravě chování překladu, otočení nebo škálování při použití ovládacích úchytů vázaných ovládacích prvků.
Inspektor vlastností zobrazí všechny dostupné správce omezení připojené ke stejnému hernímu objektu v rozevíracím seznamu s možností posouvání a zvýraznění vybraného správce omezení.

událost
Ovládací prvek Bounds poskytuje následující události. V tomto příkladu se tyto události používají k přehrávání zpětné vazby zvuku.
- Otočení spuštěno: Aktivováno při spuštění otáčení.
- Otočit zastaveno: Aktivuje se při zarážce otáčení.
- Spuštěno škálování: Aktivuje se při spuštění škálování.
- Škálování zastaveno: Aktivuje se při zastavení škálování.
- Přeložit: Aktivuje se při spuštění překladu.
- Přeložit zastaveno: Aktivuje se při zastavení překladu.

Elastické (experimentální)
Elasticky lze použít při manipulaci s objekty prostřednictvím ovládacího prvku ohraničení. Všimněte si, že elastický systém je stále v experimentálním stavu. Pokud chcete povolit elastické propojení existující komponenty správce elastických karet nebo vytvoření a propojení nového správce elastických karet pomocí Add Elastics Manager
tlačítka.

Styly úchytů
Když skript jednoduše přiřadíteBoundsControl.cs
, zobrazí se ve výchozím nastavení popisovač stylu HoloLens 1. generace. Pokud chcete použít HoloLens 2 stylových úchytů, musíte přiřadit správné úchyty a materiály.
Níže jsou uvedeny předfaby, materiály a hodnoty měřítka ovládacích úchytů HoloLens 2 stylových úchytů. Tento příklad najdete ve scéně BoundsControlExamples
.

Úchyty (nastavení pro styl HoloLens 2)
- Materiál úchytu: OhraničujícíBoxHandleWhite.mat
- Úchyt uchopený materiál: BoundingBoxHandleBlueGrabbed.mat
- Prefab popisovače škálování: MRTK_BoundingBox_ScaleHandle.prefab
- Prefab popisovače škálování: MRTK_BoundingBox_ScaleHandle_Slate.prefab
- Velikost úchytu měřítka: 0,016 (1,6 cm)
- Odsazení úchytu měřítka: 0.016 (zvětší se schytitelné sbalení, než je vizuál úchytu)
- Předfab úchytu pro otočení: MRTK_BoundingBox_RotateHandle.prefab
- Velikost úchytu pro otáčení: 0,016
- Odsazení úchytu pro otáčení: 0,016 (zvětší se sbalovací úchyt schytající o něco větší než vizuál úchytu)
Změny transformace pomocí manipulátoru objektů
Ovládací prvek ohraničení lze použít v kombinaci s povolením ObjectManipulator.cs
určitých typů manipulace (např. přesunutí objektu) bez použití úchytů. Obslužná rutina manipulace podporuje jednu i dvouruční interakci. Sledování rukou lze použít k interakci s objektem v blízkosti.

Aby se ohraničení ovládacích okrajů při přesouvání chovat stejně jako při přesouvání pomocí ObjectManipulator
vzdálené interakce, doporučuje se připojit své události pro On Manipulat Started / On Manipulat On Manipulat SkončiloBoundsControl.HighlightWires
/ BoundsControl.UnhighlightWires
, jak je znázorněno na snímku obrazovky výše.
Postup přidání a konfigurace ovládacího prvku hranic pomocí Nástroje Unity Inspector
- Přidání kolaru boxu do objektu
- Přiřazení
BoundsControl
skriptu k objektu - Konfigurace možností, jako jsou metody aktivace (viz část Vlastnosti inspektoru níže)
- (Volitelné) Přiřazení předfab a materiálů pro ovládací prvek HoloLens 2 ohraničení stylů (viz část Styly úchytů níže)
Poznámka
Pomocí pole Přepsat cílový objekt a hranice v inspektoru přiřaďte konkrétní objekt a sloučit objekt s více podřízenými komponentami.
Postup přidání a konfigurace ovládacího prvku hranic v kódu
Vytvoření instance datové krychle GameObject
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
Přiřazení
BoundsControl
skriptu objektu s koladérem pomocí addComponent<>()private BoundsControl boundsControl; boundsControl = cube.AddComponent<BoundsControl>();
Konfigurace možností buď přímo na ovládacím prvku, nebo prostřednictvím některé ze skriptovatelných konfigurací (viz vlastnosti inspektoru a oddíl Konfigurace níže)
// Change activation method boundsControl.BoundsControlActivation = BoundsControlActivationType.ActivateByProximityAndPointer; // Make the scale handles large boundsControl.ScaleHandlesConfig.HandleSize = 0.1f; // Hide rotation handles for x axis boundsControl.RotationHandlesConfig.ShowRotationHandleForX = false;
(Volitelné) Přiřaďte předpřipravené materiály pro ovládací prvek HoloLens 2 ohraničení stylu. To stále vyžaduje přiřazení prostřednictvím inspektoru, protože materiály a předfaby by se měly dynamicky načítat.
Poznámka
Použití složky Resources Unity nebo Shader.Find pro dynamické načítání shaderů se nedoporučuje, protože permutace shaderu nemusí za běhu chybět.
BoxDisplayConfiguration boxConfiguration = boundsControl.BoxDisplayConfig;
boxConfiguration.BoxMaterial = [Assign BoundingBox.mat]
boxConfiguration.BoxGrabbedMaterial = [Assign BoundingBoxGrabbed.mat]
ScaleHandlesConfiguration scaleHandleConfiguration = boundsControl.ScaleHandlesConfig;
scaleHandleConfiguration.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
scaleHandleConfiguration.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
scaleHandleConfiguration.HandlePrefab = [Assign MRTK_BoundingBox_ScaleHandle.prefab]
scaleHandleConfiguration.HandleSlatePrefab = [Assign MRTK_BoundingBox_ScaleHandle_Slate.prefab]
scaleHandleConfiguration.HandleSize = 0.016f;
scaleHandleConfiguration.ColliderPadding = 0.016f;
RotationHandlesConfiguration rotationHandleConfiguration = boundsControl.RotationHandlesConfig;
rotationHandleConfiguration.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
rotationHandleConfiguration.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
rotationHandleConfiguration.HandlePrefab = [Assign MRTK_BoundingBox_RotateHandle.prefab]
rotationHandleConfiguration.HandleSize = 0.016f;
rotationHandleConfiguration.ColliderPadding = 0.016f;
Příklad: Nastavení minimálního, maximálního limitu ovládacího prvku pomocí MinMaxScaleConstraint
Pokud chcete nastavit minimální a maximální měřítko, připojte ho k ovládacímu MinMaxScaleConstraint
prvku. Protože ovládací prvek hranic automaticky připojí a aktivuje správce omezení, MinMaxScaleConstraint se automaticky použije na změny transformace po připojení a konfiguraci.
Můžete také použít MinMaxScaleConstraint k nastavení minimálního a maximálního měřítka pro ObjectManipulator
.
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
bcontrol = cube.AddComponent<BoundsControl>();
// Important: BoundsControl creates a constraint manager on start if one does not exist.
// There's no need to manually attach a constraint manager.
MinMaxScaleConstraint scaleConstraint = bcontrol.gameObject.AddComponent<MinMaxScaleConstraint>();
scaleConstraint.ScaleMinimum = 1f;
scaleConstraint.ScaleMaximum = 2f;
Příklad: Přidání ovládacího prvku ohraničení kolem herního objektu
Pokud chcete přidat ovládací prvek ohraničení kolem objektu, jednoduše do něj přidejte komponentu BoundsControl
:
private void PutABoundsControlAroundIt(GameObject target)
{
target.AddComponent<BoundsControl>();
}
Migrace z ohraničujícího boxu
Existující předfaby a instance pomocí ohraničujícího rámečku je možné upgradovat na nový ovládací prvek hranic prostřednictvím okna migrace , který je součástí balíčku nástrojů MRTK.
Pro upgrade jednotlivých instancí ohraničujícího rámečku existuje také možnost migrace uvnitř inspektoru vlastností komponenty.
