Share via


Kézi menü – MRTK2

Példa a Hand Menu UX-ra

A kézi menük lehetővé teszik a felhasználók számára a gyakran használt funkciókhoz tartozó, kézzel csatlakoztatott felhasználói felület gyors megjelenítését. Ha meg szeretné akadályozni a hamis aktiválást más objektumokkal való interakció során, a kéz menü olyan lehetőségeket kínál, mint a "Lapos kéz megkövetelése" és a "Tekintet aktiválásának használata". Javasoljuk, hogy ezeket a lehetőségeket használja a nemkívánatos aktiválás megelőzése érdekében.

Példák a Kézi menüre

A HandMenuExamples.unity jelenet a mappában MRTK/Examples/Demos/HandTracking/Scenes van. Amikor fut, a jelenet csak az aktuálisan kiválasztott menütípust aktiválja.
HandMenu_ExampleScene

Ezeket a kézimenü-előfabsokat a mappában MRTK/Examples/Common/Prefabs találja.

HandMenu_Small_HideOnHandDrop és HandMenu_Medium_HideOnHandDrop

Ez a két példa egyszerűen aktiválja és inaktiválja a MenuContent objektumot az OnFirstHandDetected() és az OnLastHandLost() esemény menüjének megjelenítéséhez és elrejtéséhez.
HandMenu_ExampleScene 1
HandMenu_ExampleScene 2

HandMenu_Large_WorldLock_On_GrabAndPull

A hosszabb interakciós időt igénylő összetettebb menük esetén javasoljuk, hogy a menüt globálisan zárolja. Ebben a példában a felhasználó az OnFirstHandDetected() és az OnLastHandLost() eseményeken a MenuContent aktiválása és inaktiválása mellett a menüt is megragadhatja és lekérheti.
HandMenu_ExampleScene 3

A Backplate-tal ManipulationHandler megragadható és mozgatható. A Manipuláció elindítvaeseményen a SolverHandler.UpdateSolvers inaktiválva van a menü globális zárolásához. Emellett megjelenik a Bezárás gomb is, amely lehetővé teszi, hogy a felhasználó bezárja a menüt a feladat befejezésekor. A Manipuláció befejeződött esemény meghívja HandConstraintPalmUp.StartWorldLockReattachCheckCoroutine parancsot, hogy a felhasználó a tenyér felemelésével és nézésével visszahozza a menüt.
HandMenu_ExampleScene 4

A Bezárás gomb újraaktiválja a SolverHandler.UpdateSolvers parancsot , és elrejti a MenuContent parancsot.
HandMenu_ExampleScene 5

HandMenu_Large_AutoWorldLock_On_HandDrop

Ez a példa hasonló a HandMenu_Large_WorldLock_On_GrabAndPull. Az egyetlen különbség az, hogy a menü automatikusan globálisan zárolva lesz a kézdobáskor. Ezt a viselkedést úgy kezeli a rendszer, hogy nem rejti el a MenuContent onLastHandLost() eseményt. A lekéréses & viselkedése megegyezik HandMenu_Large_WorldLock_On_GrabAndPull példával.

Parancsfájlok

A HandConstraint viselkedés egy olyan megoldási megoldást biztosít, amely a nyomon követett objektumot egy biztonságos régióra korlátozza a korlátozott tartalom (például a kézi felhasználói felület, a menük stb.) számára. A biztonságos régiók olyan területeknek minősülnek, amelyek nem kapcsolódnak egymáshoz. A rendszer a meghívott HandConstraintPalmUp származtatott osztályt HandConstraint is tartalmazza, hogy bemutassa a solver tracked objektum aktiválásának gyakori viselkedését, amikor a tenyér a felhasználóval néz szembe.

További dokumentációért tekintse meg az egyes HandConstraint tulajdonságokhoz elérhető eszköztippeket. Néhány tulajdonságot az alábbiakban talál részletesebben.

HandMenu_ExampleScene Palm up
  • Biztonságos zóna: A biztonságos zóna határozza meg, hogy hol korlátozza a tartalmat. Javasoljuk, hogy a tartalom az Ulnar oldalán legyen elhelyezve, hogy elkerülje a kézzel való átfedést és a jobb interakciós minőséget. A biztonságos zónákat úgy számítjuk ki, hogy egy sík ortogonálisra vetített kéz tájolását a kamera nézetére vetítjük, és a kéz körüli határolókeretre sugárszórjuk. A biztonságos zónák úgy vannak definiálva, hogy működjenek, IMixedRealityHand de más vezérlőtípusokkal is működnek. Javasoljuk, hogy vizsgálja meg, hogy az egyes biztonságos zónák mit jelentenek a különböző vezérlőtípusokon.

  • Kövesse a kezét, amíg a kamera felé nem áll Ha ez a beállítás aktív, a solver addig követi a kéz forgását, amíg a menü nem igazodik megfelelően a tekintethez, és ekkor a kamerával néz szembe. Ez a viselkedés úgy működik, hogy a HandConstraintSolver SolverRotationBehavior értékét a LookAtTrackedObjectről LookAtMainCamera-ra módosítja, mivel a Solver gazeAlignment szöge változó.

HandMenu Safe Zones
  • Aktiválási események: Jelenleg négy HandConstraint aktiválási esemény aktiválódik. Ezek az események számos különböző kombinációban használhatók egyedi HandConstraint viselkedések létrehozásához, lásd a HandBasedMenuExample jelenetet MRTK/Examples/Demos/HandTracking/Scenes/ , amely példákat mutat be ezekre a viselkedésekre.

    • OnHandActivate: akkor aktiválódik, ha egy kéz megfelel az IsHandActive metódusnak.
    • OnHandDeactivate: akkor aktiválódik, ha az IsHandActive metódus már nem teljesül.
    • OnFirstHandDetected: akkor fordul elő, ha a kézkövetési állapot egyik kézről a nézetben való elsőre változik.
    • OnLastHandLost: akkor fordul elő, ha a kézkövetés állapota legalább egy kézről nézetben változik, és nincs kéz a nézetben.
  • Solver-aktiválási/deaktiválási logika: A logika aktiválására és inaktiválására HandConstraintPalmUp jelenleg a SolverHandler UpdateSolver értékének használatával lehet javaslatot tenni, nem pedig az objektum letiltásával/engedélyezésével. Ez a viselkedés a példajelenetben a csatolt menü ManipulationHandler "OnManipulationStarted/Ended" eseményei után aktivált szerkesztőalapú horgokon keresztül látható.

    • A hand-constraint logika leállítása: Amikor a kézzel korlátozott objektumot az aktiválási/deaktiválási logika leállítására (vagy nem futtatására) próbálja beállítani, állítsa az UpdateSolver értékét Hamis értékre a HandConstraintPalmUp letiltása helyett.
      • Ha engedélyezni szeretné a tekintetalapú (vagy akár nem tekintetalapú) reattach logikát, kövesse a HandConstraintPalmUp.StartWorldLockReattachCheckCoroutine() függvény meghívásával. Ez a hívás elindít egy koroutint, amely ezután továbbra is ellenőrzi, hogy teljesülnek-e az "IsValidController" feltételek, és az UpdateSolver értékét True (igaz) értékre állítja, ha az (vagy az objektum le van tiltva).
    • A hand-constraint logika indítása: Amikor a kézi korlátozású objektumot úgy próbálja beállítani, hogy újra elkezdje követni a kezét (attól függően, hogy megfelel-e az aktiválási feltételeknek), állítsa a SolverHandler UpdateSolver értékét true (igaz) értékre.
  • Újracsatolási logika: A jelenleg HandConstraintPalmUp képes automatikusan újraaktiválni a célobjektumot a nyomon követett pontra, függetlenül attól, hogy a SolverHandler UpdateSolver értéke Igaz-e vagy sem. Ezt a viselkedést a HandConstraintPalmUp StartWorldLockReattachCheckCoroutine() függvényének meghívásával lehet kezelni, miután az már világzárolt (amely ebben az esetben gyakorlatilag False értékre állítja a SolverHandler UpdateSolverjét).

Lásd még