Ovládací prvek Ohraničení – MRTK2

Ovládací prvek Bounds

BoundsControl je nová komponenta chování při manipulaci, která se dříve nacházela v BoundingBoxu. Ovládací prvek Bounds provádí v nastavení řadu vylepšení a zjednodušení a přidává nové funkce. Tato komponenta nahrazuje 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 rámeček, který označuje, že s ním lze pracovat. Úchyty na rozích a hranách rámečku umožňují změnu velikosti, otáčení nebo překlad objektu. Ovládací prvek bounds také reaguje na vstup uživatele. Na HoloLens 2 například ovládací prvek meze reaguje na blízkost prstů 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 scéně BoundsControlExamples .

Příklad ovládacího prvku Bounds

Vlastnosti inspektoru

Cílový objekt

Tato vlastnost určuje, který objekt bude transformován manipulací ovládacích prvků hranic. Pokud není nastavený žádný objekt, nastaví se jako výchozí objekt vlastníka.

Chování při aktivaci

Existuje několik možností, jak aktivovat rozhraní ovládacího prvku bounds.

  • Aktivovat při spuštění: Ovládací prvek Bounds se po spuštění scény zviditelní.
  • Aktivovat podle vzdálenosti: Ovládací prvek Ohraničení je viditelný, když je artikulovaná ruka blízko objektu.
  • Aktivovat ukazatelem: Ovládací prvek Bounds se zobrazí, když je zacílit ukazatelem paprsku rukou.
  • Aktivovat podle vzdálenosti a ukazatele: Ovládací prvek Ohraničení se zobrazí, když je zamířený ukazatelem rukou nebo je artikulovaná ruka blízko objektu.
  • Aktivovat ručně: Ovládací prvek Bounds se automaticky nezobrazí. Můžete ho ručně aktivovat pomocí skriptu tak, že se dostanete k vlastnosti boundsControl.Active.

Přepsání hranic

Nastaví uchycení rámečku z objektu pro výpočet hranic.

Odsazení krabic

Přidá odsazení k hranicím smykače, které se používají k výpočtu rozsahů ovládacího prvku. To bude mít vliv nejen na interakci, ale také na vizuály.

Zploštěná osa

Určuje, zda je ovládací prvek v jedné z os zploštělý, takže je dvourozměrný a nepovoluje manipulaci na této ose. Tuto funkci lze použít pro tenké objekty, jako jsou tabule. Pokud je zploštěná osa nastavená na Zploštět automaticky , skript automaticky vybere osu s nejmenším rozsahem jako zploštěnou osu.

Vyhlazování

Část vyhlazování umožňuje nakonfigurovat 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ů. Vizuální konfigurace jsou propojené nebo vložené skriptovatelné objekty a jsou podrobněji popsány v části objektu konfigurace.

Objekty konfigurace

Ovládací prvek se dodává se sadou objektů konfigurace, které lze uložit jako skriptovatelné objekty a sdílet mezi různými instancemi nebo předem připravenými objekty. Konfigurace je možné sdílet a propojit buď jako jednotlivé soubory skriptovatelných prostředků, nebo jako vnořené skriptovatelné prostředky uvnitř předem připravených prostředků. Další konfigurace je také možné definovat přímo v instanci bez propojení s externím nebo vnořeným skriptovatelným assetem.

Kontrolor ovládacího prvku hranic bude indikovat, jestli je konfigurace sdílena nebo vložena jako součást aktuální instance, a to tak, že v inspektoru vlastností zobrazí zprávu. Kromě toho nebude možné sdílené instance upravovat přímo v samotném okně vlastností ovládacího prvku bounds, ale místo toho musí být prostředek, na který odkazuje, přímo modifikován, aby nedošlo k náhodným změnám ve sdílených konfiguracích.

V současné době ovládací prvek v mezích nabízí možnosti objektů konfigurace pro následující funkce:

Konfigurace boxu

Konfigurace boxu je zodpovědná za vykreslení plného rámečku s hranicemi definovanými pomocí velikosti uchycení 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 materiál: materiál pro krabici, když uživatel pracuje s ovládacím prvku tak, že se uchopí přes blízkou nebo vzdálenou interakci.
  • Měřítko zobrazení zploštělé osy: měřítko, které se použije na zobrazení rámečku, pokud je jedna z os zploštěná.

Konfigurace popisovačů škálování

Tato zásuvka vlastností umožňuje upravit chování a vizualizaci úchytů měřítka ovládacího prvku ohraničení.

  • Materiál rukojeti: materiál použitý na rukojeti.
  • Materiál rukojeti: materiál nanesený na rukojeti.
  • Popisovač prefab: volitelný prefab pro popisovač škálování. Pokud není nastaveno, použije MRTK jako výchozí datovou krychli.
  • Velikost úchytu: velikost úchytu škálování.
  • Odsazení smykače: odsazení, které se přidá do uchycení úchytu.
  • Kreslit tether při manipulaci: Když je aktivní, nakreslí tether čáru z bodu zahájení interakce na aktuální pozici ruky nebo ukazatele.
  • Popisovače ignorují uchycení: Pokud se tady propojí schytávač, budou popisovače ignorovat jakoukoli kolizi s tímto uřazákovačem.
  • Prefab handle slate: prefab to use for the handle when the control is flattened.
  • Zobrazit úchyty škálování: řídí viditelnost úchytu.
  • Chování škálování: Můžete nastavit na rovnoměrné nebo nerovnoměrné škálování.

Konfigurace popisovačů obměny

Tato konfigurace definuje chování popisovače otáčení.

  • Materiál rukojeti: materiál použitý na rukojeti.
  • Materiál rukojeti: materiál nanesený na rukojeti.
  • Popisovač prefab: volitelný prefab pro úchyt. Pokud není nastaveno, použije MRTK jako výchozí kouli.
  • Velikost úchytu: velikost úchytu.
  • Odsazení smykače: odsazení, které se přidá do uchycení úchytu.
  • Kreslit tether při manipulaci: Když je aktivní, nakreslí tether čáru z bodu zahájení interakce na aktuální pozici ruky nebo ukazatele.
  • Popisovače ignorují uchycení: Pokud se tady propojí schytávač, budou popisovače ignorovat jakoukoli kolizi s tímto uřazákovačem.
  • Popisovač prefab collider type: type to be used with the created handle.
  • Zobrazit úchyt pro X: řídí viditelnost úchytu pro osu X.
  • Zobrazit úchyt pro Y: řídí viditelnost úchytu pro osu Y.
  • Zobrazit úchyt pro Z: řídí viditelnost úchytu pro osu Z.

Konfigurace překladových popisovačů

Umožňuje povolit a konfigurovat úchyty překladu pro ovládací prvek meze. Všimněte si, že popisovače překladu jsou ve výchozím nastavení zakázané.

  • Materiál rukojeti: materiál použitý na rukojeti.
  • Materiál rukojeti: materiál nanesený na rukojeti.
  • Popisovač prefab: volitelný prefab pro úchyt. Pokud není nastaveno, použije MRTK jako výchozí kouli.
  • Velikost úchytu: velikost úchytu.
  • Odsazení smykače: odsazení, které se přidá do uchycení úchytu.
  • Kreslit tether při manipulaci: Když je aktivní, nakreslí tetherovou čáru od bodu zahájení interakce do aktuální ruky nebo pozice ukazatele.
  • Popisovače ignorují s collider: Pokud se zde propojí schytačka, budou popisovače ignorovat jakoukoli kolizi s tímto uchycením.
  • Handle prefab collider type: typ uchycený pro použití s vytvořeným úchytem.
  • Zobrazit úchyt pro X: řídí viditelnost úchytu pro osu X.
  • Zobrazit úchyt pro Y: řídí viditelnost úchytu pro osu Y.
  • Zobrazit úchyt pro Z: řídí viditelnost úchytu pro osu Z.

Konfigurace propojení umožňuje funkci drátového modelu ovládacího prvku ohraničení. Je možné nakonfigurovat následující vlastnosti:

  • Drátěný materiál: materiál použitý na drátěnou síť.
  • Poloměr hrany drátěného modelu: tloušťka drátěného modelu.
  • Drátěný tvar: tvar drátěného modelu může být krychlový nebo válcový.
  • Zobrazit drátový model: řídí viditelnost drátového modelu.

Konfigurace efektu bezkontaktní komunikace

Zobrazení a skrytí úchytů pomocí animace na základě vzdálenosti od rukou Má dvoustupňovou animaci se škálováním. Výchozí hodnoty jsou nastaveny na chování HoloLens 2 stylu.

Ohraničení ovládacího prvku Bezkontaktní komunikace
  • Aktivní efekt bezkontaktní komunikace: Povolení aktivace popisovače na základě bezkontaktní komunikace
  • Střední vzdálenost objektu: Vzdálenost pro měřítko 1. kroku
  • Blízkost objektu: Vzdálenost měřítka ve 2. kroku
  • Vzdálené měřítko: Výchozí hodnota škálování prostředku úchytu, když jsou ruce mimo rozsah interakce ovládacího prvku hranic (vzdálenost definovaná výše pomocí popisovače střední vzdálenosti). Ke skrytí popisovače ve výchozím nastavení použijte hodnotu 0.
  • Střední měřítko: Hodnota měřítka prostředku úchytu, když jsou ruce v rozsahu interakce ovládacích prvků (vzdálenost definovaná výše pomocí "blízkosti úchytu". K zobrazení normální velikosti použijte 1.
  • Zavřít měřítko: Hodnota měřítka prostředku úchytu, když jsou ruce v rozsahu interakce uchopení (vzdálenost definovaná výše pomocí vlastnosti Popisovač těsné blízkosti. K zobrazení větší velikosti použijte 1.x.
  • Rychlost vzdáleného zvětšování: Ohodnoťte měřítko objektu s měřítkem přiblížení, když se ruka přesune ze střední do vzdálené blízkosti.
  • Střední míra zvětšování: Ohodnoťte měřítko objektu s měřítkem přiblížení, když se ruka přesune ze střední do těsné blízkosti.
  • Zavřít míru růstu: Ohodnoťte měřítko objektu s měřítkem přiblížení, když se ruka přesune z těsné blízkosti do středu objektu.

Systém omezení

Ovládací prvek Bounds podporuje použití správce omezení k omezení nebo úpravě chování při překladu, rotaci nebo škálování při použití ovládacích úchytů hranic.

Inspektor vlastností zobrazí v rozevíracím seznamu všechny dostupné správce omezení připojené ke stejnému hernímu objektu s možností posouvání a zvýraznění vybraného správce omezení.

Omezení ovládacího prvku Bounds

Události

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í zvukové zpětné vazby.

  • Rotace spuštěna: Aktivuje se při zahájení otáčení.
  • Otočit zastaveno: Aktivuje se, když se otáčení zastaví.
  • Škálování bylo zahájeno: Aktivuje se při zahájení škálování.
  • Škálování zastaveno: Aktivuje se, když se škálování zastaví.
  • Překlad zahájen: Aktivuje se při zahájení překladu.
  • Překlad zastaven: Aktivuje se, když se překlad zastaví.
Události ovládacího prvku Bounds

Elastické (experimentální)

Elastické prvky lze použít při manipulaci s objekty prostřednictvím ovládacího prvku hranic. Elastický systém je stále v experimentálním stavu. Pokud chcete povolit elastické výrazy, můžete buď propojit existující komponentu správce elastics, nebo vytvořit a propojit nového správce elastických ů Add Elastics Manager pomocí tlačítka.

Hranice – ovládací prvek Elastics

Popisovat styly

Ve výchozím nastavení se při přiřazení BoundsControl.cs skriptu zobrazí popisovač stylu HoloLens 1. generace. Pokud chcete použít HoloLens 2 styl úchytů, musíte přiřadit správné úchyty a materiály.

Styly úchytů ovládacího prvku Bounds 2

Níže jsou uvedené prefaby, materiály a hodnoty měřítka pro HoloLens 2 ovládacích úchytů omezení stylu. Tento příklad najdete ve scéně BoundsControlExamples .

Bounds – ovládací prvek HandleStyles

Úchyty (nastavení pro styl HoloLens 2)

  • Rukojeť materiál: BoundingBoxHandleWhite.mat
  • Rukojeť 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í uchycení uchycení úchytů: 0,016 (o něco větší uchopitelný s collider než vizuál úchytu)
  • Prefab úchytu pro otáčení: MRTK_BoundingBox_RotateHandle.prefab
  • Velikost úchytu pro otáčení: 0,016
  • Odsazení ukládacích úchytů: 0,016 (o něco větší uchopitelný uchycení s collideru než vizuální úchyt)

Změny transformace pomocí manipulátoru objektů

Ovládací prvek hranic lze použít v kombinaci s ObjectManipulator.cs , aby bylo možné provádět určité typy manipulace (např. přesunutí objektu) bez použití úchytů. Obslužná rutina pro manipulaci podporuje interakci s jednou i dvěma rukama. Sledování rukou se dá použít k interakci s objektem zblízka.

Manipulátor objektů ovládacího prvku Bounds

Aby se hraniční hrany ovládacích prvků chovaly stejným způsobem při přesouvání pomocí ObjectManipulatorvzdálené interakce, doporučuje se připojit události on Manipulation StartedOn Manipulation Ended (Při manipulaci zahájené / při ukončení BoundsControl.HighlightWires / BoundsControl.UnhighlightWires manipulace), jak je znázorněno na snímku obrazovky výše.

Postup přidání a konfigurace ovládacího prvku bounds pomocí inspektoru Unity

  1. Přidání uchytáče Box 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í prefab a materiálů pro ovládací prvek HoloLens 2 mezí stylu (viz část Popis stylů níže).

Poznámka

Pomocí pole Přepsat cílový objekt a hranice v inspektoru přiřaďte konkrétní objekt a s collider v objektu s více podřízenými komponentami.

Ovládací prvek Bounds

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

  1. Vytvoření instance datové krychle GameObject

    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    
  2. Přiřazení BoundsControl skriptu k objektu pomocí s collideru pomocí rutiny AddComponent<>()

    private BoundsControl boundsControl;
    boundsControl = cube.AddComponent<BoundsControl>();
    
  3. Nakonfigurujte možnosti buď přímo na ovládacím prvku, nebo prostřednictvím některé ze skriptovatelných konfigurací (viz část Vlastnosti a konfigurace inspektoru 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ředběžné materiály a materiály pro ovládací prvek HoloLens 2 hranice stylu. To stále vyžaduje přiřazení prostřednictvím inspektoru, protože materiály a prefaby by měly být dynamicky načteny.

Poznámka

Použití složky Resources Unity nebo Shader.Find pro dynamické načítání shaderů se nedoporučuje, protože za běhu můžou chybět permutace shaderů.

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í řídicího měřítka minimálních a maximálních mezí pomocí funkce MinMaxScaleConstraint

Pokud chcete nastavit minimální a maximální škálování, připojte k ovládacímu MinMaxScaleConstraint prvku parametr . Jako ovládací prvek mezí automaticky připojí a aktivuje správce omezení, MinMaxScaleConstraint se po připojení a konfiguraci automaticky použije na změny transformace.

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 kolem objektu přidat ovládací prvek ohraničení, jednoduše do něj přidejte komponentu BoundsControl :

private void PutABoundsControlAroundIt(GameObject target)
{
   target.AddComponent<BoundsControl>();
}

Migrace z ohraničujícího rámečku

Existující předem připravené a instance pomocí ohraničujícího rámečku je možné upgradovat na ovládací prvek nové hranice 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 je také k dispozici možnost migrace uvnitř inspektoru vlastností komponenty.

Migrace ovládacího prvku Bounds

Viz také