El koçu — MRTK2

El Koçu Menüsü

El koçu, sistem kullanıcının ellerini algılamadığında tetiklenen 3B modellenmiş eldir. Bu, hareket öğretilmediğinde kullanıcıya rehberlik eden bir "öğretim" bileşeni olarak uygulanır. Kullanıcılar belirli bir süre boyunca belirtilen hareketi yapmamışsa, eller bir gecikmeyle döngüye geçecektir. El koçu bir düğmeye basmayı veya hologramı seçmeyi göstermek için kullanılabilir.

Geçerli etkileşim modeli kaydırma, uzak seçim ve dokunmaya yakın gibi çok çeşitli hareket denetimlerini temsil eder. Mevcut El koçu örneklerinin tam listesi aşağıda verilmiştir:

  • Dokunmaya yakın – Düğmeler için kullanılır veya etkileşim kurulabilen nesneleri kapatır
  • Uzak seçim – Uzak olan nesneler için kullanılır
  • Taşı – Uzaydaki hologramı taşımak için kullanılır
  • Döndür – Hologramların veya nesnelerin nasıl döndürüleceğini göstermek için kullanılır
  • Ölçek : Hologramları daha büyük veya daha küçük olacak şekilde yönlendirmeyi göstermek için kullanılır
  • El çevirisi – Kullanıcı arabirimi başlangıç panelini veya El Menülerini getirmek için kullanılır
  • Palm up – Sinekkuşu anında kutudan çıkma deneyimi için kullanılır. Bir diğer öneri de kullanıcı arabirimi başlangıç panelinin açılması olabilir
  • Scroll : Bir listeyi veya uzun bir belgeyi kaydırmak için kullanılır

Örnek sahne

Örnekleri HandCoachExample sahnesinde bulabilirsiniz: MixedRealityToolkit.Examples/Experimental/HandCoach/Scenes

El 3B Varlıklar

Varlıkları şu şekilde bulabilirsiniz: MixedRealityToolkit.SDK/Experimental/HandCoach

Kalite

Dışlanmış örgüde bozulmalar fark ederseniz, projenizin uygun miktarda eklem kullandığından emin olmanız gerekir. Unity'nin Proje Ayarlarını > Düzenle > Kalitesi > Diğer > Blend Ağırlıkları'na gidin. Pürüzsüz Eklemleri görmek için "4 kemik" seçildiğinden emin olun. Proje Ayarı

Betikler

Etkileşim ipucu

Betik, InteractionHint.cs el donanımı için animasyonları ve soluklaşmaları tetiklemeye yönelik sarmalayıcı işlevselliği sağlar.

Etkileşim ipucu ayarlama

Bir etkileşim ipucu ayarlamak için, sağlanan "StaticHandCoachRoot_L.prefab" ve "StaticHandCoachRoot_R.prefab" ön eklerinin kullanılması önerilir. Bu prefab, sağlanan ipucu animasyonlarının beklendiği gibi çalıştığından emin olmak için InteractionHint betiğini ve el donanımını ve uygun hiyerarşiyi içerir. Aksi takdirde, betiği animator ile el donanımınızdan bir üst düzey gameObject üzerine yerleştirmeniz gerekir.

Denetçi özellikleri

  • HideIfHandTracked Bu boole, kullanıcının elleri izlenirken görselleri gizlemek için el izleme durumunun kullanılıp kullanılmayacağını belirtir. Bu false olarak ayarlanırsa ipucunun gizlenip gizlenmeyeceğini belirlemek için yalnızca "customShouldHideVisuals" betik özelliği kullanılır.

  • MinDelay Bu özellik, görselleri göstermek için en düşük gecikmeyi belirtir. Varsayılan olarak, kullanıcının elleri izlenmiyorsa el görselleri bu kadar saniye sonra görünür.

  • MaxDelay Bu özellik, görselleri göstermek için en fazla gecikmeyi belirtir. Varsayılan olarak, kullanıcının elleri izlense bile el görselleri bu kadar saniye sonra görünür.

  • UseMaxTimer Bu boole değeri false olarak ayarlanırsa, maksimum zamanlayıcıyı devre dışı bırakır ve yalnızca kullanıcının elleri görüntüden çıktığında veya özel koşul false döndürdüğünde el ipucunun gösterilmesine izin verir.

  • Yinelenir Bu özellik, en düşük veya en yüksek süreölçer geçtiğinde ipucu animasyonunun kaç kez oynatıldığını denetler. İpucu daha sonra gizlenir ve gecikmeyi yeniden bekler.

  • Otomatik Etkinleştir Bu boole değeri true olarak ayarlandığında, betiğin GameObject'i hiyerarşide etkin olduğunda ve betik etkinleştirildiğinde ipucu otomatik olarak zamanlayıcı mantığı üzerinden çalıştırılır. Bu yalnızca kod aracılığıyla ipucu görünümünü ve kayboluşunu el ile denetlemek istiyorsanız false olarak ayarlanmalıdır.

  • AnimationState İpucu etkin olduğunda oynatılması gereken animasyon durumunun adı. StartHintLoop() işlevi çağrılmadan önce bu ayarlanmalıdır (Otomatik Etkinleştirme işaretliyse OnEnable sırasında).

Script aracılığıyla InteractionHint'i denetleme

  • StartHintLoop Bu işlev, Otomatik Etkinleştirme bayrağı true olarak ayarlanırsa OnEnable'ı başlatan show/hide döngüsünü başlatır.
  • StopHintLoop Bu işlev, şu anda oynatılmıyorsa belirme animasyon durumunu çağırır, ardından show/hide döngüsünü devre dışı bırakır ve hiyerarşide el makinesini devre dışı bırakır.
  • AnimationState Bu dize, döngü sırasında hangi animasyon durumunun çalındığını belirler. Hangi durumun yürütüleceğini değiştirmek için bu dizeyi değiştirebilirsiniz, ancak StopHintLoop'u çağırdıktan sonra bunu yapmanız ve durumu değiştirdikten sonra StartHintLoop'u yeniden çağırmanız gerekir.
  • CustomShouldHideVisuals Bunu kendi işlevinizle ayarlayabilirsiniz; el görsellerini gizlemek istediğinizde true değerini döndürmelidir (MinMaxTimer'ı, özellikle de max parametresini unutmayın)

Özel animasyonla ilgili dikkat edilmesi gerekenler

Soldurmalar varsayılan olarak 0,5 saniyedir, dolayısıyla anlamlı bilgilerin iletilmesi için donanımla kullanılmak üzere oluşturulan tüm özel animasyonların minimum 1,5 saniye olması gerekir

Sağlanan varsayılan belirme ve belirme durumları, Fade_In ve Fade_Out, ikinci ana karenin zaman damgasını değiştirerek belirme uzunluğunu ayarlayarak ayarlanabilir.

Animator ve betik, kurulumu olabildiğince basit hale getirebilecek şekilde ayarlanmıştır. Yeni animasyon durumları eklemek için fbx'inizi içeri aktarmanız, animasyon adının ayrı bir adla ayarlandığından emin olun ve bu animasyonu animatöre sürükleyin.

MoveToTarget

MoveToTarget.cs betiği, el ipucunu bir izleme konumundan zaman içinde hedef konuma taşımak için işlevsellik sağlar.

MoveToTarget'ı ayarlama

Sağlanan "MovingHandCoachRoot_L.prefab" ve "MovingHandCoachRoot_R.prefab", hiyerarşilerinde bir MoveToTarget içerir. Bu betiği kendi kurulumunuzda kullanmak istiyorsanız, donanımınız için Animator'ı içeren kök gameobject üzerine yerleştirmeniz gerekir.

Denetçi özellikleri

  • TrackingObject Bunu, makinenin hareketine başlamadan önce izlemesini istediğiniz nesneyle ayarlayın. İzlemeyi saptamanıza yardımcı olması için boş bir GameObject oluşturmanız ve bunu belirli bir konuma taşımanız önerilir.
  • TargetObject Bunu, makinenin hareketi sırasında hareket etmesini istediğiniz nesneyle ayarlayın. İzlemeyi saptamanıza yardımcı olması için boş bir GameObject oluşturmanız ve bunu belirli bir konuma taşımanız önerilir.
  • RootObject Göreli konumların doğru hesaplanabilmesi için bunu izleme ve hedef nesne arasında paylaşılan bir üst öğe olarak ayarlayın. Dahil edilen prefab, hiyerarşisinde hem izleme hem de hedef nesnelere sahiptir, ancak hedef nesneyi prefab dışında bir gameObject olarak ayarlayabilir ve kök nesneyi paylaşılan bir üst öğe olarak değiştirebilirsiniz.
  • Süre TrackingObject'ten TargetObject'e (saniye olarak) taşınması için geçmesi gereken süre (saniye olarak).
  • TargetOffset GameObject'in doğru hedef konuma ulaşmasını sağlamak için ayarlanabilir bir uzaklık. Bu, animasyonunuz animasyon sırasında konum uzaklığı içeriyorsa kullanışlıdır.
  • AnimationCurve Bu, doğrusal bir eğri olarak varsayılandır, ancak hareket yolunu başlatırken ve durdururken içeri/dışarıyı hafifletmek için eğriyi değiştirebilirsiniz.

MoveToTarget'i betik aracılığıyla denetleme

Özel betiğinizde, el makinesinin TrackingObject'i takip etmesini isterken Follow() çağrısı yapın, ardından el makinesinin TargetObject'e hareketini başlatmasını istediğinizde MoveToTargetPosition() çağrısı yapın.

Animasyonlar aracılığıyla MoveToTarget'ı denetleme

Taşınması gereken animasyonda iki olay ayarlayın: biri Follow() çağrısıyla, diğeri moveToTargetPosition() çağrısıyla. El makinesinin TrackingObject'inizi izlemesine neden olduğundan, ilk ana karede takip et ayarı yapılmalıdır. MoveToTargetPosition, donanımın hedefe taşınmaya başlamasını istediğiniz ana karede ayarlanmalıdır. Betik işlevselliği sağlanan ön dosyalarda bu şekilde kullanılır.

RotateAroundPoint

RotateAroundPoint.cs betiği, el ipucunu zaman içinde bir pivot noktası etrafında döndürmek için işlevsellik sağlar.

RotateAroundPoint'i ayarlama

Sağlanan "RotatingHandCoachRoot_L.prefab" ve "RotatingHandCoachRoot_R.prefab", hiyerarşilerinde bir RotateAroundPoint içerir. Bu betiği kendi kurulumunuzda kullanmak istiyorsanız, donanımınız için Animator'ı içeren kök gameobject üzerine yerleştirmeniz gerekir.

Denetçi özellikleri

  • CenteredParent Bunu, donanımın özetlemesini istediğiniz üst nesneyle ayarlayın.
  • TersParent El yönlendirmesini aynı tutmak için bunu üst öğeyle birlikte ortalanmışParent'in tersini döndürecek şekilde ayarlayın. Genel olarak bu, üzerinde InteractionHint betiği bulunan üst nesne olacaktır.
  • PivotPosition Bunu, ipucunun hareketi başlatmasını istediğiniz bir noktaya ayarlayın.
  • Süre CenteredParent çevresinde döndürülmesi için gereken süre (saniye olarak).
  • AnimationCurve Bu, doğrusal bir eğri olarak varsayılandır, ancak hareket yolunu başlatırken ve durdururken içeri/dışarıyı hafifletmek için eğriyi değiştirebilirsiniz.
  • RotationVector Her eksen boyunca döndürülecek derece.

RotateAroundPoint'i betik aracılığıyla denetleme

El makinesinin CenteredParent çevresinde dönüşe başlamasını istediğinizde özel betiğinizde RotateToTarget() çağrısı yapın. Konumun özgün PivotPosition'a sıfırlanmasını istediğinizde ResetAndDeterminePivot() çağrısı yapın.

RotateAroundPoint'i animasyonlar aracılığıyla denetleme

Taşınması gereken animasyonda iki olay ayarlayın: biri ResetAndDeterminePivot() çağrısıyla, diğeri de RotateToTarget() çağrısıyla. ResetAndDeterminePivot, el donanımının PivotPosition'a sıfırlanmasına neden olduğundan ilk ana karede ayarlanmalıdır. RotateToTarget, donanımın CenteredParent çevresinde dönmeye başlamasını istediğiniz ana karede ayarlanmalıdır. Betik işlevselliği sağlanan ön dosyalarda bu şekilde kullanılır.