Kéz menü

Példa a Kéz menü felhasználói felületének példáira

A kéz menük lehetővé teszik a felhasználók számára, hogy gyorsan megjelenik a kézzel csatlakoztatott felhasználói felület a gyakran használt függvények számára. Ha meg szeretné akadályozni a hamis aktiválást más objektumokkal való interakció során, a kézi menü olyan lehetőségeket kínál, mint például az "Egyszerű kéz használatának megkövetelése" vagy a "Tekintetes aktiválás használata". Javasoljuk, hogy ezeket a beállításokat használja a nemkívánatos aktiválás megakadályozása érdekében.

Példák a kéz menüre

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

Ezeket a kézzel készített menü-előtagokat a MRTK/Examples/Demos/HandTracking/Prefabs mappában 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, hogy az OnFirstHandDetected() és az OnLastHandLost() esemény menüjét mutassa és rejtse el.
HandMenu_ExampleScene 1
HandMenu_ExampleScene 2

HandMenu_Large_WorldLock_On_GrabAndPull

A hosszabb interakciós időt igénylő, összetettebb menük esetében javasolt a menüt világra zárolni. Ebben a példában a felhasználó a MenuContent onFirstHandDetected() és az OnLastHandLost() események aktiválása és deaktiválása mellett világzárolást is kaphat a menühöz.
HandMenu_ExampleScene 3

A backplate segítségével megragadható és ManipulationHandler mozgatható. A Manipulation Started eseményen a SolverHandler.UpdateSolvers inaktiválva van a menü világzárolása érdekében. Emellett megjelenik a Bezárás gomb, amely lehetővé teszi, hogy a felhasználó bezárja a menüt a feladat befejezésekor. A Manipulation Ended eseményen a HandConstraintPalmUp.StartWorldLockReattachCheckCoroutine hívásával teszi lehetővé, hogy a felhasználó a menüt visszahozza a gyűjtés és a tok megkeresése révén.
HandMenu_ExampleScene 4

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

HandMenu_Large_AutoWorldLock_On_HandDrop

Ez a példa hasonló az HandMenu_Large_WorldLock_On_GrabAndPull. Az egyetlen különbség az, hogy a menü automatikusan világra van zárva a legördülő menüben. Ehhez egyszerűen nem kell elrejtenie a MenuContent on OnLastHandLost() eseményt. A & viselkedése megegyezik a HandMenu_Large_WorldLock_On_GrabAndPull viselkedésével.

Parancsfájlok

A viselkedés olyan megoldó megoldást biztosít, amely a nyomon követett objektumot a korlátozott tartalmak (például a felhasználói felület, menük stb.) számára biztonságos régióra HandConstraint korlátozza. Széf a régiók olyan területek, amelyek nem ékesednek össze a kézzel. Egy származtatott nevű osztálya is megtalálható, amely bemutatja a megoldó által nyomonott objektum aktiválásának gyakori viselkedését, amikor a felhasználó a HandConstraint HandConstraintPalmUp felhasználóval szemben áll.

További dokumentációért tekintse meg az egyes tulajdonságokkal kapcsolatban elérhető HandConstraint eszköz tippeket. Az alábbiakban néhány tulajdonságot definiálunk részletesebben.

HandMenu_ExampleScene Palm up
  • Széf zóna: A biztonságos zóna határozza meg, hogy hol korlátozza a tartalmat. Javasoljuk, hogy a tartalom az Ulnar Side-on legyen elhelyezve, hogy ne legyen átfedés a kézzel, és jobb interakciós minőséget biztosít. Széf zónákat úgy számítjuk ki, hogy a kéz tájolását egy síkba orientáljuk a kamera nézetével, és a határolókeretre pillantunk a kéz körül. Széf zónák úgy vannak definiálva, hogy együttműködjön velük, IMixedRealityHand de más vezérlőtípusokkal is működnek. Javasoljuk, hogy vizsgálja meg, mit képviselnek az egyes biztonságos zónák a különböző vezérlőtípusokon.

  • Kövesse a kézzel, amíg el nem néz a kamera Ezzel az aktív megoldással a megoldó kézforgatást követ, amíg a menü megfelelően nem igazodik a tekintethez, amely után a kamerával néz. Ez úgy működik, hogy a HandConstraintSolver SolverRotationBehavior változóját LookAtTrackedObjectről LookAtMainCamera-re módosítja, mivel a megoldáshoz használt GazeAlignment szög változó.

HandMenu Safe Zones
  • Aktiválási események: Jelenleg HandConstraint négy aktiválási eseményt aktiválnak. Ezek az események számos különböző kombinációban használhatók egyedi viselkedések létrehozásához. Ezekre a viselkedésre a HandConstraint HandBasedMenuExample jelenetben talál MRTK/Examples/Demos/HandTracking/Scenes/ példákat.

    • 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és állapota egyetlen kézről sem láthatóra, az első kézre változik.
    • OnLastHandLost: akkor fordul elő, ha a kézkövetés állapota legalább egy kézről nézetre változik, és egyik kéz sem látható.
  • Solver Activation/Deactivation Logic(A logika aktiválására és inaktiválására vonatkozó javaslat jelenleg a SolverHandler UpdateSolver értékének használatával érhető el) az objektum HandConstraintPalmUp letiltása/engedélyezése helyett. Ez a példa jelenetben látható a menü ManipulationHandler "OnManipulationStarted/Ended" eseményei után aktivált szerkesztőalapú hookokkal.

    • A kézre vonatkozó megkötési logika leállítása: Ha a korlátozott kézi objektumot leállítja (és nem futtatja az aktiválási/inaktiválási logikát), a HandConstraintPalmUp letiltása helyett állítsa az UpdateSolvert False (Hamis) értékre.
      • Ha engedélyezni szeretné a tekintetalapú (vagy akár nem tekintetalapú) reattach logikát, ezt a HandConstraintPalmUp.StartWorldLockReattachCheckCoroutine() függvény hívása követi. Ez kivált egy coroutine-t, amely továbbra is ellenőrzi, hogy teljesülnek-e az "IsValidController" feltételek, és az UpdateSolver true (Igaz) értékűre lesz állítva, amint az már le van tiltva (vagy az objektum le van tiltva)
    • A kézi megkötés logikájának indítása: Amikor megpróbálja úgy beállítani a korlátozott kézzel korlátozott objektumot, hogy ismét a kézhez kezdje a műveletet (attól függően, hogy megfelel-e az aktiválási feltételeknek), állítsa a SolverHandler UpdateSolver beállítását true (igaz) értékre.
  • Reattach Logic: A jelenleg képes automatikusan újra gyorsítótárazást használni a célobjektumhoz, függetlenül attól, hogy a HandConstraintPalmUp SolverHandler UpdateSolverje True (Igaz) vagy sem. Ezt a HandConstraintPalmUp StartWorldLockReattachCheckCoroutine() függvényének hívásával lehet megoldani, miután az világhoz lett rögzítve (ami ebben az esetben gyakorlatilag a SolverHandler UpdateSolver beállítását hamisra) jelenti.

Lásd még