Határvezérlő – MRTK2
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.
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.
Kapcsolatok konfigurálása (drótváz)
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.
- 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.
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.
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.
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.
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.
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.
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
- Box Collider hozzáadása objektumhoz
- Szkript hozzárendelése
BoundsControl
objektumhoz - 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)
- (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.
Határvezérlő hozzáadása és konfigurálása a kódban
A GameObject kocka példányosítása
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
Szkript hozzárendelése
BoundsControl
objektumhoz ütközővel az AddComponent<>() paranccsalprivate BoundsControl boundsControl; boundsControl = cube.AddComponent<BoundsControl>();
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;
(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.