El menüsü

El Menüsü UX Örneği

El menüleri, kullanıcıların sık kullanılan işlevler için el ile bağlı kullanıcı arabirimini hızla getirmesine olanak sağlar. Diğer nesnelerle etkileşimde bulunarak hatalı etkinleştirmeyi önlemek için, el menüsünde 'Düz El Gerektir' ve 'Bakış Etkinleştirmesini Kullan' gibi seçenekler sunulmaktadır. İstenmeyen etkinleştirmeyi önlemek için bu seçeneklerin kullanılması önerilir.

El menüsü örnekleri

HandMenuExamples.unity sahnesi klasörünün altında. Çalışma zaman, sahne yalnızca seçili olan menü türünü etkinleştirir.
HandMenu_ExampleScene

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

HandMenu_Small_HideOnHandDrop ve HandMenu_Medium_HideOnHandDrop

Bu iki örnek, MenüContent nesnesini etkinleştirmiş ve devre dışı bırakarak OnFirstHandDetected() ve OnLastHandLost() olayında menüyü gösterebilir ve gizleyebilirsiniz.
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ünyayla kilitlemenizi öneririz. Bu örnekte kullanıcı, OnFirstHandDetected() ve OnLastHandLost() olaylarında MenuContent'i etkinleştirmeye ve devre dışı bırakmaya ek olarak menüyü alıp dünya kilidine çekebilir.
HandMenu_ExampleScene 3

Arkaplate, ManipulationHandler onu yakalanabilir ve taşınabilir hale yapar. İşleme Başlatıldı olayında,SolverHandler.UpdateSolvers menüyü dünya kilidine kilitlemek için devre dışı bırakılır. Ayrıca, görev tamamlandığında kullanıcının menüyü kapatmasına izin vermek için Kapat düğmesini gösterir. İşleme Sona Erdi olayında, kullanıcının menüyü açarak ve ona bakarak menüyü geri getirmesine izin vermek için HandConstraintPalmUp.StartWorldLockReattachCheckCoroutine'i arar.
HandMenu_ExampleScene 4

Kapat düğmesi SolverHandler.UpdateSolvers'ı yeniden etkinleştirerek MenuContent'i gizler.
HandMenu_ExampleScene 5

HandMenu_Large_AutoWorldLock_On_HandDrop

Bu örnek, HandMenu_Large_WorldLock_On_GrabAndPull. Tek fark, menenin otomatik olarak el bırakma sırasında dünya kilitlenmesidir. Bu yalnızca MenuContent onLastHandLost() olayında gizlenerek yapılmaz. Çekme & davranışını al, örnekle HandMenu_Large_WorldLock_On_GrabAndPull aynıdır.

Betikler

Bu davranış, izilen nesneyi el ile kısıtlanmış içerik (el arabirimi, menüler vb.) için güvenli bir bölgeyle sınırlandıran bir çözücü HandConstraint sağlar. Kasa bölgeleri el ile kesişen alanlar olarak kabul edilir. Kullanıcıyla karşılaştığında çözücü tarafından takip edilen nesneyi etkinleştirmenin genel bir davranışını göstermek için türetilmiş bir adlı HandConstraintHandConstraintPalmUp sınıfı da dahil edilir.

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

HandMenu_ExampleScene Olarak Yenile
  • Kasa:Güvenli bölge, içeriği sınırlamak için el üzerinde nerede olduğunu belirtir. El ile çakışmayı önlemek ve gelişmiş etkileşim kalitesini önlemek için içeriğin Ulmez Tarafına yerleştirilmemesi önerilir. Kasa alanları, kameranın görünümüne doğru bir düzlem dikgeni içine tahmin edilir ve el çevresindeki sınırlayıcı kutuya göre yayınlanarak hesaplanır. Kasa alanları ile çalışmak için IMixedRealityHand tanımlanır, ancak diğer denetleyici türleriyle de çalışır. Her bir güvenli bölgenin farklı denetleyici türlerinde neyi temsil ettiğini keşfetmenizi öneririz.

  • Kameraya bakana kadar el izleme Bu etkin durumdaki çözücü, menü bakışla yeterince hizalanmış olana ve kamerayla karşı karşıya gelene kadar el döndürmeyi takip eder. Bu, çözücü ile GazeAlignment açısı değiştikça HandConstraintSolver'daki SolverRotationBehavior'ı LookAtTrackedObject'den LookAtMainCamera'ya değiştirerek çalışır.

HandMenu Kasa Bölgeleri
  • Etkinleştirme Olayları:Şu anda dört etkinleştirme olaylarını tetikler. Bu olaylar benzersiz davranışlar oluşturmak için birçok farklı bileşimde kullanılabilir. Bu davranışlara örnekler için HandConstraint lütfen altındaki HandBasedMenuExample MRTK/Examples/Demos/HandTracking/Scenes/ sahnesi'ne bakın.

    • OnHandActivate:Bir el IsHandActive yöntemini karşılarsa tetiklenir.
    • OnHandDeactivate:IsHandActive yöntemi artık karşılanamazsa tetiklenir.
    • OnFirstHandDetected:el izleme durumu, hiçbir el ile görünümde değil, görünümde ilk el olarak değişirse gerçekleşir.
    • OnLastHandLost:el izleme durumu görünümde en az bir el ile görünümde el yok olarak değişirse gerçekleşir.
  • Çözücü Etkinleştirme/DevreDışı Bırakma Mantığı: Şu anda mantığı etkinleştirme ve devre dışı bırakma önerisi, nesneyi devre dışı bırakmak/etkinleştirmek yerine SolverHandler'ın UpdateSolver değerini kullanarak yapmaktır. Bu durum, ekli menenin ManipulationHandler "OnManipulationStarted/Ended" olaylarından sonra tetiklenen düzenleyici tabanlı kancalar aracılığıyla örnek sahnede görülebilir.

    • El kısıtlama mantığını durdurma:El kısıtlanmış nesnesini durdurulacak şekilde ayarlamaya çalışırken (etkinleştirme/devre dışı bırakma mantığını çalıştırmama gibi), HandConstraintPalmUp'ı devre dışı bırakmak yerine UpdateSolver'ı False olarak ayarlayın.
      • Bakış tabanlı (hatta bakış tabanlı olmayan) Yeniden Ekle mantığını etkinleştirmek için bunu HandConstraintPalmUp.StartWorldLockReattachCheckCoroutine() işlevi çağrılarak ekleyebilirsiniz. Bu, daha sonra "IsValidController" ölçütlerinin karşılanmaması ve UpdateSolver'ın true olarak ayarlanmaması (veya nesne devre dışı bırakılmıştır) olup olmadığını denetlemeye devam eden bir coroutine tetikler
    • El kısıtlama mantığınıbaşlatma: El kısıtlaması olan nesneyi el ile tekrar takip etmeye başlamak üzere ayarlamaya çalışırken (etkinleştirme ölçütlerini karşılayarak) SolverHandler'ın UpdateSolver'ını true olarak ayarlayın.
  • Mantığı Yeniden Ekleme:Şu anda , SolverHandler'ın UpdateSolver'ın True olup olmadığı bağımsız olarak, hedef nesneyi otomatik olarak izlenir noktaya yeniden eklemeye devam eder. Bu, HandConstraintPalmUp'ın StartWorldLockReattachCheckCoroutine() işlevi dünya kilitli olduktan sonra çağrılarak yapılır (bu durumda, SolverHandler'ın UpdateSolver'ı etkin bir şekilde False olarak ayarlandı).

Ayrıca bkz.