Ovládací prvek Vazby – MRTK2

Bounds control

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ě.

Bounds control Example

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í 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.

Bounds control Proximity
  • 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í.

Bounds control Constraints

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.
Bounds control Events

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.

Bounds control Elastics

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.

Bounds Control Handle Styles 2

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 .

Bounds control HandleStyles

Ú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.

Bounds control Object Manipulator

Aby se ohraničení ovládacích okrajů při přesouvání chovat stejně jako při přesouvání pomocí ObjectManipulatorvzdá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

  1. Přidání kolaru boxu do objektu
  2. Přiřazení BoundsControl skriptu k objektu
  3. Konfigurace možností, jako jsou metody aktivace (viz část Vlastnosti inspektoru níže)
  4. (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.

Bounds Control

Postup přidání a konfigurace ovládacího prvku hranic v kódu

  1. Vytvoření instance datové krychle GameObject

    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    
  2. Přiřazení BoundsControl skriptu objektu s koladérem pomocí addComponent<>()

    private BoundsControl boundsControl;
    boundsControl = cube.AddComponent<BoundsControl>();
    
  3. 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;
    
  4. (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.

Bounds control Migrate

Viz také