Ohraničující rámeček – MRTK2

Ohraničující rámeček

Poznámka

Ohraničující rámeček je zastaralý a nahrazuje se jeho následníky. K upgradu existujících herních objektů použijte některou z možností migrace .

Skript BoundingBox.cs poskytuje základní funkce pro transformaci objektů v hybridní realitě. Ohraničující rámeček zobrazí kolem hologramu datovou krychli, která značí, že je možné s hologramem pracovat. Úchyty na rozích a hranách datové krychle umožňují změnu velikosti nebo otáčení objektu. Ohraničující rámeček také reaguje na vstup uživatele. Na HoloLens 2 například ohraničující rámeček 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.

Další informace najdete v tématu Ohraničující rámeček a panel aplikace na webu Windows Dev Center.

Příklad scény

Příklady konfigurací ohraničujícího rámečku najdete ve scéně BoundingBoxExamples .

Příklady ohraničujícího rámečku

Postup přidání a konfigurace ohraničujícího rámečku pomocí nástroje Unity Inspector

  1. Přidání uchytávače boxů k objektu
  2. Přiřazení BoundingBox 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 ohraničující rámeček stylu HoloLens 2 (viz část Popisovač stylů níže).

Poznámka

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

Ohraničující rámeček 1

Postup přidání a konfigurace ohraničujícího rámečku v kódu

  1. Vytvoření instance datové krychle GameObject

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

    private BoundingBox bbox;
    bbox = cube.AddComponent<BoundingBox>();
    
  3. Konfigurace možností (viz část Vlastnosti inspektoru níže)

    // Make the scale handles large
    bbox.ScaleHandleSize = 0.1f;
    // Hide rotation handles
    bbox.ShowRotationHandleForX = false;
    bbox.ShowRotationHandleForY = false;
    bbox.ShowRotationHandleForZ = false;
    
  4. (Volitelné) Přiřaďte prefabs a materiály pro ohraničující rámeček HoloLens 2 stylu. To stále vyžaduje přiřazení prostřednictvím inspektoru, protože materiály a prefaby by se měly dynamicky zatěžovat.

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

bbox.BoxMaterial = [Assign BoundingBox.mat]
bbox.BoxGrabbedMaterial = [Assign BoundingBoxGrabbed.mat]
bbox.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
bbox.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
bbox.ScaleHandlePrefab = [Assign MRTK_BoundingBox_ScaleHandle.prefab]
bbox.ScaleHandleSlatePrefab = [Assign MRTK_BoundingBox_ScaleHandle_Slate.prefab]
bbox.ScaleHandleSize = 0.016f;
bbox.ScaleHandleColliderPadding = 0.016f;
bbox.RotationHandleSlatePrefab = [Assign MRTK_BoundingBox_RotateHandle.prefab]
bbox.RotationHandleSize = 0.016f;
bbox.RotateHandleColliderPadding = 0.016f;

Příklad: Nastavení minimálního a maximálního měřítka ohraničujícího rámečku pomocí MinMaxScaleConstraint

Pokud chcete nastavit minimální a maximální měřítko, použijte MinMaxScaleConstraint. Můžete také použít MinMaxScaleConstraint k nastavení minimálního a maximálního měřítka pro ManipulationHandler.

GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
bbox = cube.AddComponent<BoundingBox>();
// Important: BoundingBox creates a scale handler on start if one does not exist
// do not use AddComponent, as that will create a  duplicate handler that will not be used
MinMaxScaleConstraint scaleConstraint = bbox.gameObject.GetComponent<MinMaxScaleConstraint>();
scaleConstraint.ScaleMinimum = 1f;
scaleConstraint.ScaleMaximum = 2f;

Příklad: Přidání ohraničujícího rámečku kolem herního objektu

Pokud chcete kolem objektu přidat ohraničující rámeček, jednoduše do něj přidejte komponentu BoundingBox :

private void PutABoxAroundIt(GameObject target)
{
   target.AddComponent<BoundingBox>();
}

Vlastnosti inspektoru

Cílový objekt

Tato vlastnost určuje, který objekt bude transformován manipulací ohraničujícího rámečku. Pokud není nastaven žádný objekt, ohraničující rámeček se ve výchozím nastavení nastaví na objekt vlastníka.

Přepsání hranic

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

Chování při aktivaci

Existuje několik možností aktivace rozhraní ohraničujícího rámečku.

  • Aktivovat při spuštění: Ohraničující rámeček se zobrazí po spuštění scény.
  • Aktivovat podle vzdálenosti: Ohraničující rámeček se zobrazí, když je artikulovaná ruka blízko objektu.
  • Aktivovat ukazatelem: Ohraničující rámeček se zobrazí, když na něj zacílí ukazatel ruky.
  • Aktivovat ručně: Ohraničující rámeček se automaticky nezobrazí. Můžete ho ručně aktivovat pomocí skriptu pomocí přístupu k vlastnosti boundingBox.Active.

Minimální měřítko

Minimální povolené měřítko. Tato vlastnost je zastaralá a je vhodnější přidat MinMaxScaleConstraint skript. Pokud je tento skript přidán, bude z něj odebráno minimální měřítko místo z ohraničujícího rámečku.

Maximální škálování

Maximální povolené škálování. Tato vlastnost je zastaralá a je vhodnější přidat MinMaxScaleConstraint skript. Pokud je tento skript přidán, maximální měřítko bude převzato z něj místo z ohraničujícího rámečku.

Zobrazení rámečku

Různé možnosti vizualizace ohraničujícího rámečku

Pokud je zploštěná osa nastavená na Hodnotu Zploštět automaticky, skript zakáže manipulaci podél osy s nejmenším rozsahem. Výsledkem je 2D ohraničující rámeček, který se obvykle používá pro tenké objekty.

Handles

Pokud chcete přepsat styl úchytu, můžete přiřadit materiál a prefab. Pokud nejsou přiřazeny žádné popisovače, zobrazí se ve výchozím stylu.

Události

Ohraničující rámeček obsahuje následující události. V tomto příkladu se tyto události používají k přehrávání zvukové zpětné vazby.

  • Otočení zahájeno: Aktivuje se při zahájení otáčení.
  • Otočení ukončeno: Aktivuje se po skončení otočení.
  • Škálování bylo zahájeno: Aktivuje se při zahájení škálování.
  • Škálování skončilo: Aktivuje se, když škálování skončí.
Události

Styly popisovačů

Ve výchozím nastavení se při přiřazení BoundingBox.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ů ohraničujícího rámečku

Níže jsou uvedeny prefaby, materiály a hodnoty měřítka pro úchyty ohraničujícího rámečku HoloLens 2 stylu. Tento příklad najdete ve scéně BoundingBoxExamples .

HandStyles 2

Úchyty (nastavení pro styl HoloLens 2)

  • Materiál úchytu: BoundingBoxHandleWhite.mat
  • Rukojeť uchopený materiál: BoundingBoxHandleBlueGrabbed.mat
  • Prefab popisovače škálování: MRTK_BoundingBox_ScaleHandle.prefab
  • Škálovací popisovač Slate Prefab: MRTK_BoundingBox_ScaleHandle_Slate.prefab
  • Velikost úchytu měřítka: 0,016 (1,6 cm)
  • Odsazení uchycení úchytu měřítka: 0,016 (zvětší se uchopitelný skolovač o něco větší než vizuál úchytu)
  • Prefab úchytu pro otáčení: MRTK_BoundingBox_RotateHandle.prefab
  • Velikost úchytu otáčení: 0,016
  • Odsazení uchycení úchytu pro otáčení: 0,016 (zvětší se uchopitelný uchycení schytávače o něco větší než vizuální úchyt)

Bezkontaktní komunikace (nastavení stylu HoloLens 2)

Zobrazení a skrytí úchytů pomocí animace na základě vzdálenosti od rukou Má dvoustupňovou animaci škálování.

Blízkost
  • Aktivní efekt bezkontaktní komunikace: Povolení aktivace popisovače na základě bezkontaktní komunikace
  • Handle Medium Proximity: Distance for the 1st step scaling
  • Handle Close Proximity: Distance for the 2nd step scaling
  • Vzdálené škálování: Výchozí hodnota měřítka prostředku úchytu, když jsou ruce mimo rozsah interakce ohraničujícího rámečku (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, pokud jsou ruce v rozsahu interakce s ohraničovacím rámečkem (vzdálenost definovaná výše pomocí vlastnosti Popisovač těsné blízkosti. 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.

Nastavení pohyblivého objektu pomocí obslužné rutiny pro manipulaci

Ohraničující rámeček lze kombinovat, ManipulationHandler.cs aby bylo možné objekt přesunout pomocí vzdálené interakce. 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.

Obslužná rutina pro manipulaci

Aby se hrany ohraničujícího rámečku chovaly stejným způsobem při přesouvání pomocí ManipulationHandlervzdálené interakce, doporučuje se připojit jeho události pro On Manipulation StartedOn Manipulation Ended (Při zahájení / manipulace při ukončení BoundingBox.HighlightWires / BoundingBox.UnhighlightWires manipulace), jak je znázorněno na snímku obrazovky výše.

Migrace na ovládací prvek bounds

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