El menüsü

El menü UX örneği

El menüleri, kullanıcıların sık kullanılan işlevler için el ile bağlanmış Kullanıcı arabirimini hızla görüntülemesine olanak tanır. Diğer nesnelerle etkileşim kurarken yanlış etkinleştirmeyi engellemek için, el menüsü ' düz el gerektir ' ve ' Gaze Activation kullan ' gibi seçenekler sağlar. İstenmeyen etkinleştirmeyi engellemek için bu seçeneklerin kullanılması önerilir.

El menü örnekleri

Handmenuexamples. Unity sahneyi klasör altında MRTK/Examples/Demos/HandTracking/Scenes . Bu işlem çalışırken, sahne yalnızca seçili olan menü türünü etkinleştirir.
HandMenu_ExampleScene

Bu menü menüsünü, klasörü altında bulabilirsiniz MRTK/Examples/Demos/HandTracking/Prefabs .

HandMenu_Small_HideOnHandDrop ve HandMenu_Medium_HideOnHandDrop

Bu iki örnek, OnFirstHandDetected () ve OnLastHandLost () olayında menü göstermek ve gizlemek için menucontent nesnesini etkinleştirir ve devre dışı bırakır.
HandMenu_ExampleScene 1
HandMenu_ExampleScene 2

HandMenu_Large_WorldLock_On_GrabAndPull

Daha uzun etkileşim süresi gerektiren daha karmaşık menüler için, menüyü dünya çapında kilitlemeniz önerilir. Bu örnekte, Kullanıcı, OnFirstHandDetected () ve OnLastHandLost () olaylardaki menucontent 'i etkinleştirmeyi ve devre dışı bırakacağınız yanı sıra, menüyü de açabilir ve alabilir.
HandMenu_ExampleScene 3

Sırt ManipulationHandler , pablesi ve taşınabilir hale getirir. Düzenleme başlatıldı olayı, solverhandler. updatelehvers devre dışı bırakıldığında menüyü dünyadan kilitleyin. Ayrıca, görev tamamlandığında kullanıcının menüyü kapatmasını sağlamak için Kapat düğmesini gösterir. Düzenleme sona erdikten sonra, kullanıcının bir yandan Palm 'yi oluşturup arayarak, kullanıcının menüyü el ile getirip getirmelerini sağlamak için HandConstraintPalmUp. Startworldlockiliştirilebilir Chcheckcoroutine çağırır.
HandMenu_ExampleScene 4

Kapat düğmesi Solverhandler. updatesoli 'Yi yeniden etkinleştirir ve menuıal içeriğini gizler.
HandMenu_ExampleScene 5

HandMenu_Large_AutoWorldLock_On_HandDrop

Bu örnek HandMenu_Large_WorldLock_On_GrabAndPull benzerdir. Tek fark, menünün el bırakma sırasında otomatik olarak dünya çapında kilitlenme olacaktır. Bu işlem, OnLastHandLost () olayıdır. & çekme davranışı, HandMenu_Large_WorldLock_On_GrabAndPull örnekle aynıdır.

Betikler

HandConstraintDavranış, izlenen nesneyi el ile kısıtlanmış içerik (örneğin, el ile Kullanıcı arabirimi, menüler vb.) için güvenli bir bölgeye kısıtlayan bir çözücü sağlar. Kasa bölgeler, el ile kesişmeyen alanları kabul edilir. Elde edilen bir türetilmiş sınıf, HandConstraint HandConstraintPalmUp Palm tarafından Kullanıcı kullanıma sunulmasından sonra çözücü tarafından izlenen nesneyi etkinleştirecek yaygın bir davranışı göstermek için de eklenmiştir.

Ek belgeler için lütfen her bir özellik için kullanılabilen araç ipuçlarına bakın HandConstraint . Birkaç özellik aşağıda daha ayrıntılı olarak tanımlanmıştır.

HandMenu_ExampleScene Palm up
  • Kasa bölgesi: güvenli bölge, içeriğin nerede sınırlandırılmasına yönelik olduğunu belirtir. El ve geliştirilmiş etkileşim kalitesiyle çakışmaktan kaçınmak için içeriğin ulnar Side yerleştirilmesi önerilir. Kasa bölgeler, dünyanın her yanındaki bir sınırlayıcı kutuya karşı, kameranın görünümü ve rayatama için tasarlanan bir düzle yansıtılmıştır. Kasa bölgeler birlikte çalışmak üzere tanımlanmıştır, IMixedRealityHand ancak diğer denetleyici türleriyle de çalışır. Her güvenli bölgenin farklı denetleyici türlerinde ne kadar temsil ettiğini keşfetmeniz önerilir.

  • Karşılıklı kameraya kadar takip edin Bu etkinken, çözücü, menü yeterince Gaze ile hizalanana kadar, kamerayı her zaman hizaladığı sürece el dönüşü izler. Bu, HandConstraintSolver ' deki SolverRotationBehavior, çözücü 'nün GazeAlignment açısı değiştiğinden, Gevkattrackingkedobject 'den Gevkatmaincamera 'a değiştirilerek işe yarar.

HandMenu Safe Zones
  • Etkinleştirme olayları: Şu anda HandConstraint dört etkinleştirme olayı tetikler. Bu olaylar, benzersiz davranışlar oluşturmak için birçok farklı birleşimde kullanılabilir HandConstraint , lütfen MRTK/Examples/Demos/HandTracking/Scenes/ Bu davranışların örnekleri için bkz. HandBasedMenuExample sahneyi.

    • Onhandacönleyici: bir el ıshandactive yöntemini sağladığında tetikler.
    • Onhanddeactivate: ıshandactive yöntemi artık karşılanmadığı zaman tetikler.
    • OnFirstHandDetected: el ile izleme durumu görünüm olmadan, görünümün ilk tarafınında değiştiğinde gerçekleşir.
    • OnLastHandLost: el ile izleme durumu görünüm ' de en az bir yandan görünüm olmadan değiştirildiğinde gerçekleşir.
  • Çözücü etkinleştirme/devre dışı bırakma mantığı: Şu anda mantığı etkinleştirme ve devre dışı bırakma önerisi HandConstraintPalmUp , nesneyi devre dışı bırakmak/etkinleştirmek yerine Solverhandler 'in updateçözücü değeri kullanılarak yapılır. Bu, ekli menünün Işleme "Onişletionstarted/bitti" olaylarından sonra tetiklenen düzenleyici tabanlı kancalar aracılığıyla örnek sahnede görülebilir.

    • El ile kısıtlama mantığını durdurma: el ile kısıtlanan nesneyi durmak üzere ayarlamaya çalışırken (etkinleştirme/devre dışı bırakma mantığını çalıştırmayan), Updateçözücü 'yi HandConstraintPalmUp devre dışı bırakmak yerine false olarak ayarlayın.
      • Gaze tabanlı (veya hatta gaksuz) yeniden bağlama mantığını etkinleştirmek istiyorsanız, bu daha sonra HandConstraintPalmUp. Startworldlockiliştirilebilir Chcheckcoroutine () işlevini çağırarak izlenir. Bu, "IsValidController" ölçütlerinin karşılanıp karşılanmadığını denetlemeye devam eden bir eş yordamın tetikleyeceğini ve (veya nesne devre dışı bırakılmışsa) Updateçözücü ' i true olarak ayarlayacağız
    • El ile kısıtlama mantığı başlatılıyor: elle kısıtlanmış nesneyi, el ile sonra başlayacak şekilde ayarlamaya çalışırken (etkinleştirme ölçütlerine uygun olup olmadığına bağlı olarak), SolverHandler 'Nin updateçözücü ' i true olarak ayarlayın.
  • Mantığı yeniden bağlama: Şu anda, HandConstraintPalmUp Solverhandler 'ın Updateçözücü 'nün true olup olmamasından bağımsız olarak, hedef nesneyi izlenen noktaya otomatik olarak yeniden yükleyebiliyor. Bu, HandConstraintPalmUp 'in Startworldlockledchcheckcoroutine () işlevi çağırarak yapılır, bu durum Dünya kilitlendikten sonra (Bu durumda, SolverHandler 'nin Updateçözücü ' i yanlış olarak ayarlamadır).

Ayrıca bkz.