Határvezérlő – MRTK2

Kötött vezérlőelem

A BoundsControl a manipulációs viselkedés új összetevője, amely korábban a BoundingBoxban található. A korlátok szabályozása számos fejlesztést és egyszerűsítést tesz lehetővé a beállításban, és új funkciókat ad hozzá. Ez az összetevő helyettesíti a határolókeretet, amely elavult lesz.

A BoundsControl.cs szkript alapvető funkciókat biztosít az objektumok vegyes valóságban való átalakításához. A határ vezérlőelem egy dobozt jelenít meg a hologram körül, amely azt jelzi, hogy használható. A doboz sarkaiban és szélein lévő fogópontok lehetővé teszik az objektum skálázását, elforgatását vagy fordítását. A korlátok vezérlője a felhasználói bevitelre is reagál. A HoloLens 2 például a határvezérlő reagál az ujjközre, és vizuális visszajelzést ad az objektumtól való távolság észleléséhez. Minden interakció és vizualizáció egyszerűen testre szabható.

Példajelenet

A jelenetben BoundsControlExamples példákat találhat a határvezérlési konfigurációkra.

Példa a Határ vezérlőelemre

Vizsgáló tulajdonságai

Célobjektum

Ez a tulajdonság határozza meg, hogy melyik objektumot fogja átalakítani a korlátok vezérlésének manipulálása. Ha nincs beállítva objektum, az alapértelmezés szerint a tulajdonos objektum lesz.

Aktiválási viselkedés

A korlátok vezérlőfelületének aktiválására több lehetőség is van.

  • Aktiválás indításkor: A határvezérlő a jelenet elindítása után válik láthatóvá.
  • Aktiválás közelség alapján: A kötött vezérlőelem akkor válik láthatóvá, ha egy csuklós kéz közel van az objektumhoz.
  • Aktiválás mutatóval: A kötött vezérlőelem akkor válik láthatóvá, ha egy kézi sugarú mutató célozza.
  • Aktiválás közelség és mutató alapján: A kötött vezérlőelem akkor válik láthatóvá, ha egy kézi sugarú mutató célozza, vagy ha egy csuklós kéz közel van az objektumhoz.
  • Manuális aktiválás: A kötött vezérlőelem nem válik automatikusan láthatóvá. Manuálisan aktiválhatja egy szkripten keresztül a boundsControl.Active tulajdonság elérésével.

Korlátok felülbírálása

Beállít egy dobozütköztetőt az objektumból a kötött számításokhoz.

Doboz kitöltése

Egy kitöltést ad hozzá a vezérlő kiterjedésének kiszámításához használt ütközőkorlátokhoz. Ez nemcsak az interakciót befolyásolja, hanem a vizualizációkat is.

Tengely simítása

Azt jelzi, hogy a vezérlő egybesimítva van-e az egyik tengelyen, ami 2 dimenzióssá teszi, és letiltja a tengely mentén történő manipulációt. Ez a funkció vékony objektumokhoz, például palakhoz használható. Ha az egybesimított tengely az Automatikus simítás értékre van állítva, a szkript automatikusan a legkisebb mértékben, simított tengelyként választja ki a tengelyt.

Simítás

A simítás szakasz lehetővé teszi a simítási viselkedés konfigurálását a vezérlő méretezéséhez és elforgatásához.

Vizualizációk

A határvezérlő megjelenése a megfelelő vizualizációk konfigurációjának módosításával konfigurálható. A vizuális konfigurációk csatolt vagy beágyazott szkriptelhető objektumok, és részletesebben a konfigurációs objektum szakaszában ismertetjük.

Konfigurációs objektumok

A vezérlő konfigurációs objektumok készletét tartalmazza, amelyek szkriptelhető objektumokként tárolhatók, és különböző példányok vagy előfabsok között oszthatók meg. A konfigurációk megoszthatók és csatolhatók egyéni szkriptelhető eszközfájlokként vagy beágyazott szkriptelhető objektumokként az előfabsokban. További konfigurációk közvetlenül a példányon is meghatározhatók anélkül, hogy külső vagy beágyazott szkriptelhető objektumhoz kellene kapcsolódni.

A korlátok vezérlőfelügyelője jelzi, hogy egy konfiguráció meg van-e osztva vagy beágyazott az aktuális példány részeként a tulajdonságfelügyelő üzenetének megjelenítésével. Emellett a megosztott példányok nem szerkeszthetők közvetlenül a bounds vezérlőtulajdonságok ablakában, hanem a hivatkozott objektumot közvetlenül módosítani kell a megosztott konfigurációk véletlen módosításainak elkerülése érdekében.

A korlátokat vezérlő jelenleg a következő funkciókhoz kínál konfigurációs objektumokat:

Dobozkonfiguráció

A dobozkonfiguráció felelős egy folytonos doboz megjelenítéséért, amelynek határait a ütközőméret és a doboz kitöltése határozza meg. A következő tulajdonságok állíthatók be:

  • Doboz anyaga: meghatározza a renderelt dobozra alkalmazott anyagot, ha nincs interakció. A doboz csak akkor jelenik meg, ha az anyag be van állítva.
  • Dobozra ragadott anyag: a doboz anyaga, amikor a felhasználó közel vagy távolról történő megragadással kommunikál a vezérlővel.
  • Egybesimított tengely megjelenítési skálája: a dobozkijelzőre alkalmazott méretezés, ha az egyik tengely simított.

Skálázási fogópontok konfigurálása

Ez a tulajdonságfiók lehetővé teszi a korlátok vezérlőelem skálázási fogópontjai viselkedésének és vizualizációjának módosítását.

  • Fogóanyag: a fogópontokra alkalmazott anyag.
  • Fogópont megragadott anyag: a megragadott fogópontra alkalmazott anyag.
  • Fogópont-előfab: a skálázási fogóponthoz választható előfab. Ha nincs beállítva, az MRTK alapértelmezés szerint egy kockát fog használni.
  • Fogópont mérete: a skálázási fogópont mérete.
  • Ütközőpárna: a fogópontütközőhöz hozzáadandó kitöltés.
  • Rajzolás tetherrel a módosításkor: ha aktív, akkor az interakció kezdőpontjától az aktuális kéz- vagy mutatópozícióig húz egy vonalat.
  • A fogópontok figyelmen kívül hagyják a ütközőt: ha egy ütköző itt kapcsolódik, a fogópontok figyelmen kívül hagyják a ütközővel való ütközést.
  • Fogólap előfab: a vezérlő simításakor a fogóponthoz használandó előfab.
  • Skálázási fogópontok megjelenítése: a fogópont láthatóságát szabályozza.
  • Skálázási viselkedés: beállítható egységes vagy nem egységes skálázásra.

Rotációs fogópontok konfigurálása

Ez a konfiguráció határozza meg a forgatópont viselkedését.

  • Fogóanyag: a fogópontokra alkalmazott anyag.
  • Fogópont megragadott anyag: a megragadott fogópontra alkalmazott anyag.
  • Leíró-előfab: opcionális előfab a fogóponthoz. Ha nincs beállítva, az MRTK alapértelmezés szerint egy gömböt használ.
  • Fogópont mérete: a fogópont mérete.
  • Ütközőpárna: a fogópontütközőhöz hozzáadandó kitöltés.
  • Rajzolás tetherrel a módosításkor: ha aktív, akkor az interakció kezdőpontjától az aktuális kéz- vagy mutatópozícióig húz egy vonalat.
  • A fogópontok figyelmen kívül hagyják a ütközőt: ha egy ütköző itt kapcsolódik, a fogópontok figyelmen kívül hagyják a ütközővel való ütközést.
  • Fogópont előlapi ütköztető típusa: a létrehozott leíróhoz használandó ütközőtípus.
  • Az X leírójának megjelenítése: az X tengely fogópontjának láthatóságát szabályozza.
  • Az Y leírójának megjelenítése: az Y tengely fogópontjának láthatóságát szabályozza.
  • A Z leírójának megjelenítése: a Z tengely fogópontjának láthatóságát szabályozza.

A fordítási kezeli a konfigurációt

Lehetővé teszi a fordítási fogópontok engedélyezését és konfigurálását a korlátok vezérléséhez. Vegye figyelembe, hogy a fordítási leírók alapértelmezés szerint le vannak tiltva.

  • Fogóanyag: a fogópontokra alkalmazott anyag.
  • Fogópont megragadott anyag: a megragadott fogópontra alkalmazott anyag.
  • Leíró-előfab: opcionális előfab a fogóponthoz. Ha nincs beállítva, az MRTK alapértelmezés szerint egy gömböt használ.
  • Fogópont mérete: a fogópont mérete.
  • Ütközőpárna: a fogópontütközőhöz hozzáadandó kitöltés.
  • Rajzolás tetherrel a módosításkor: ha aktív, akkor az interakció kezdőpontjától az aktuális kéz- vagy mutatópozícióig húz egy vonalat.
  • A fogópontok figyelmen kívül hagyják a ütközőt: ha egy ütköző itt kapcsolódik, a fogópontok figyelmen kívül hagyják a ütközővel való ütközést.
  • Fogópont előlapi ütköztető típusa: a létrehozott leíróhoz használandó ütközőtípus.
  • Az X leírójának megjelenítése: az X tengely fogópontjának láthatóságát szabályozza.
  • Az Y leírójának megjelenítése: az Y tengely fogópontjának láthatóságát szabályozza.
  • A Z leírójának megjelenítése: a Z tengely fogópontjának láthatóságát szabályozza.

A kapcsolatkonfiguráció lehetővé teszi a határvezérlés drótváz funkcióját. A következő tulajdonságok konfigurálhatók:

  • Drótváz anyaga: a drótvázhálóra alkalmazott anyag.
  • Drótváz peremének sugara: a drótváz vastagsága.
  • Drótvázalakzat: a drótváz alakja köb- vagy hengeres.
  • Drótváz megjelenítése: szabályozza a drótváz láthatóságát.

Közelségi effektus konfigurálása

A fogópontok megjelenítése és elrejtése animációval a kéz távolsága alapján. Kétlépéses skálázási animációval rendelkezik. Az alapértelmezett értékek HoloLens 2 stílus viselkedésére vannak beállítva.

A határok szabályozzák a közelségeket
  • Aktív közelségi hatás: Közelségi alapú leíróaktiválás engedélyezése
  • Objektum közepes közelsége: Az 1. lépéses skálázás távolsága
  • Objektum közelsége: A 2. lépéses skálázás távolsága
  • Távoli skálázás: A leíróeszköz alapértelmezett skálázási értéke, ha a kezek kívül vannak a határvezérlési interakció tartományán (a fenti távolság a "Közepes közelség kezelése" kifejezéssel van meghatározva. A 0 használatával alapértelmezés szerint elrejtheti a leírót)
  • Közepes skálázás: A leíróeszköz skálázási értéke, ha a kezek a határtartományon belülre vannak irányítva (a fenti távolság a "Leíró közelsége" által meghatározott távolság. Normál méret megjelenítése az 1-es számmal)
  • Close Scale :A leíróeszköz skálázási értéke, ha a kezek a megragadási interakció tartományán belül vannak (a fent meghatározott távolság a "Fogópont közelsége" szerint van meghatározva. Nagyobb méret megjelenítése 1,x-et használva)
  • Távoli növekedés aránya: A közelségi skálázott objektumok méretezésének értékelése, ha a kéz közepesről távolra mozog.
  • Közepes növekedési arány: Értékelje a közelségi skálázott objektumok méretezését, amikor a kéz közepesről közelre mozog.
  • Közelítési arány: Értékelje a közelségi skálázott objektumok méretezését, amikor a kéz a közelségből az objektumközpontba kerül.

Kényszerrendszer

A korlátok vezérlőeleme támogatja a kényszerkezelő használatát a fordítási, forgatási vagy skálázási viselkedés korlátozásához vagy módosításához a korlátok vezérlőfogópontjainak használata közben.

A tulajdonságfelügyelő megjeleníti az összes elérhető kényszerkezelőt, amely ugyanahhoz a játékobjektumhoz van csatolva egy legördülő menüben, és kijelölheti a kijelölt kényszerkezelőt.

Kötött vezérlőelemek korlátozásai

esemény

A Bounds vezérlőelem a következő eseményeket biztosítja. Ez a példa ezeket az eseményeket használja a hangvisszajelzések lejátszásához.

  • Forgatás elindítva: A forgatás indításakor aktiválódott.
  • Forgatás leállt: A forgatás leállásakor aktiválódik.
  • Méretezés elindítva: A skálázás indításakor aktiválódik.
  • Skálázás leállt: A skálázás leállásakor aktiválódik.
  • Fordítás elindítva: A fordítás indításakor aktiválódik.
  • Fordítás leállt: A fordítás leállásakor aktiválódik.
A korlátok szabályozzák az eseményeket

Elastics (kísérleti)

A rugalmasságok akkor használhatók, ha az objektumokat a korlátok vezérlésével módosítják. Vegye figyelembe, hogy a rugalmas rendszer még kísérleti állapotban van. A rugalmasságok engedélyezéséhez csatoljon egy meglévő elastics manager-összetevőt, vagy hozzon létre és csatoljon egy új elastics managert a Add Elastics Manager gombon keresztül.

A korlátok szabályozzák az Elasticst

Fogópontstílusok

Alapértelmezés szerint, amikor csak hozzárendeli a BoundsControl.cs szkriptet, az megjeleníti a HoloLens 1st gen stílus fogópontját. A HoloLens 2 stílusú fogópontok használatához hozzá kell rendelnie a megfelelő fogópont-előtagokat és anyagokat.

Határfogópont-stílusok 2

Az alábbiakban a HoloLens 2 stíluskorlátok vezérlőfogópontjaihoz tartozó elő-, anyag- és méretezési értékeket találja. Ezt a példát a BoundsControlExamples jelenetben találja.

Kötött vezérlőelem HandleStyles (Fogópontstílusok)

Fogópontok (HoloLens 2 stílus beállítása)

  • Fogóanyag: BoundingBoxHandleWhite.mat
  • Fogópont megragadott anyag: BoundingBoxHandleBlueGrabbed.mat
  • Skálázási leíró előtagja: MRTK_BoundingBox_ScaleHandle.prefab
  • Scale Handle Slate Prefab: MRTK_BoundingBox_ScaleHandle_Slate.prefab
  • Skálázási fogópont mérete: 0,016 (1,6cm)
  • Skálázási fogópontütköző kitöltése: 0,016 (a megragadható ütköző valamivel nagyobb, mint a fogópont vizualizáció)
  • Forgatópont előlapja: MRTK_BoundingBox_RotateHandle.prefab
  • Forgatópont mérete: 0,016
  • Forgatófogópont ütköző kitöltése: 0,016 (a megragadható ütköző valamivel nagyobb, mint a fogantyú vizualizáció)

Átalakítási változások objektummanipulátor használatával

A határvezérlővel ObjectManipulator.cs kombinálva bizonyos típusú manipulációk (például az objektum mozgatása) engedélyezhetők fogópontok használata nélkül. A kezelő egy és kétkezes interakciókat is támogat. A kézkövetéssel közelről is kommunikálhat egy objektummal.

Bounds control Object Manipulator

Annak érdekében, hogy a korlátok vezérlőélei ugyanúgy viselkedjenek, amikor "távoli interakcióval" helyezik átObjectManipulator, javasoljuk, hogy csatlakoztassa az eseményeket a manipulációnmegkezdett manipuláció befejeződöttBoundsControl.HighlightWires / / BoundsControl.UnhighlightWires, illetve a fenti képernyőképen látható módon.

Határvezérlő hozzáadása és konfigurálása a Unity Inspector használatával

  1. Box Collider hozzáadása objektumhoz
  2. Szkript hozzárendelése BoundsControl objektumhoz
  3. Konfigurálja a beállításokat, például az "Aktiválás" metódusokat (lásd alább az Inspector tulajdonságok szakaszát)
  4. (Nem kötelező) Elő- és anyagleírók hozzárendelése HoloLens 2 stílushatár-vezérlőelemekhez (lásd az alábbi Stílusok kezelése szakaszt)

Megjegyzés

Az inspector Target Object and Bounds Override ( Célobjektum és korlátok felülbírálása ) mezőjével több gyermekösszetevővel rendelkező objektumot és ütközőt rendelhet hozzá az objektumhoz.

Kötött vezérlőelem

Határvezérlő hozzáadása és konfigurálása a kódban

  1. A GameObject kocka példányosítása

    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    
  2. Szkript hozzárendelése BoundsControl objektumhoz ütközővel az AddComponent<>() paranccsal

    private BoundsControl boundsControl;
    boundsControl = cube.AddComponent<BoundsControl>();
    
  3. Konfigurálja a beállításokat közvetlenül a vezérlőn vagy a szkriptelhető konfigurációk egyikén keresztül (lásd az alábbi Inspector properties and Configurations (Vizsgáló tulajdonságai és konfigurációi szakasz) című szakaszt).

    // 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. (Nem kötelező) A HoloLens 2 stílushatár-vezérlőelemek elő- és anyagainak hozzárendelése. Ehhez továbbra is szükség van a felügyelőn keresztüli hozzárendelésekre, mivel az anyagokat és az előlapokat dinamikusan kell betölteni.

Megjegyzés

A Unity "Resources" mappájának vagy a Shader.Find elemnek a dinamikus betöltéséhez nem ajánlott használni, mivel a shader-permutációk futásidőben hiányozhatnak.

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élda: A minimális és maximális határérték-vezérlési skálázás beállítása a MinMaxScaleConstraint használatával

A minimális és maximális méret beállításához csatoljon egy MinMaxScaleConstraint elemet a vezérlőhöz. Ahogy a korlátok vezérlőeleme automatikusan csatolja és aktiválja a kényszerkezelőt, a MinMaxScaleConstraint automatikusan alkalmazva lesz az átalakítás módosításaira a csatolás és a konfigurálás után.

A MinMaxScaleConstraint használatával is beállíthatja a minimális és maximális skálázást.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élda: Határolókeret-vezérlő hozzáadása egy játékobjektumhoz

Ha egy objektumhoz kötött vezérlőelemet szeretne hozzáadni, egyszerűen adjon hozzá egy összetevőt BoundsControl :

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

Migrálás a határolókeretből

A határolókeretet használó meglévő elő- és példányok az MRTK-eszközök csomagjának részét képező áttelepítési ablakban frissíthetők az új határvezérlőre.

A határolókeret egyes példányainak frissítéséhez egy migrálási lehetőség is rendelkezésre áll az összetevő tulajdonságfelügyelőjén belül.

Bounds control Migrate

Lásd még