holodepth

Babylon.js · XR

XR interaction: hedefle, onayla, hareket ettir

XR etkileşimi yalnızca «düğmeye basıldı» biti değildir; kullanıcının dikkatini bir hedefe kilitleme ( reticle / ışın), o hedefle geçici veya kalıcı uzamsal ilişki kurma (tut, sürükle) ve gerekirse 3B arayüz ile aynı öncelik kurallarını paylaşma problemidir. Bu sayfa oyun mekaniği rehberi değil; özel yapıları ( dolaylı vs doğrudan, isabet hacmi, fiziğe bağlama) netleştirir.

Holodepth Three.js tarafında benzer etki çoğu zaman ışın + raycaster veya denetleyici tabanlı yardımcı sınıflarla anlatılır; burada WebXR girdi modeli ile babylon sahne mantığını aynı cümlede tutmayı hedefleriz — tekrar eden ev projesi kodunu kopyalamak değil, ortak hata sınıflarını görmek.

Özet: dört etkileşim sorusu

Soru Karar Belirti
Nasıl hedeflenir? Dolaylı ışın mı, doğrudan el mi? Menzil dışı nesne «seçilemiyor».
Onay eşiği Basılı tutma, çift tık, gecikme? Yanlışlıkla tetik veya gecikmeli tepki.
Taşıma Ham örgü mü, fiziğe bağlı mı? Nesne iç içe geçer veya süzülür.
Arayüz Dünya paneli ile sahne yarışı? Düğme «tuşlanmıyor» veya arkadaki nesne seçiliyor.

Dolaylı ve doğrudan hedefleme

XR etkileşimini tek bir «tıkla» modelinde toplamak kolaydır; oysa kullanıcı uzaktaki düğmeyi ışınla seçerken ile elinin dibindeki tutamacı kavrayarak farklı beden dili kullanır. Dolaylı ( indirect) modda niyet, kontrolcüden çıkan hedef ışınla uzaktaki yüzeye taşınır; doğrudan ( near interaction) modda ise genelde kontrolcüye bağlı bir yakınlık hacmi veya el / parmak örgüsü ile «burada tutuyorum» hissi kurulur. İki yolun menzili, toleransı ve hata maliyeti aynı değildir; ikisini aynı işaretçi rengiyle birleştirmek hem öğrenilebilirliği düşürür hem de bölüm 2’deki isabet kurallarını bulanıklaştırır. Her mod için ayrı girdi işleme ve ayrı görsel geri bildirim (farklı imleç, farklı vurgu) ayırın; ışının matematiksel kaynağı için Controller input · duruş ve ışın sayfasına başvurun — bu bölüm yalnızca etkileşim modu ayrımını sabitler.

Isabet ve kesişim çizgisi

Hangi modda olursanız olun, uzaktan seçim çoğu zaman bir ışın–örgü kesişimi ile başlar. Masaüstünde imleç tek bir ekran düzlemindeyken XR'de ışın sahne içinde uzar; aynı yönde birden çok üçgen isabet edebilir ve «hangi yüzey kazanır» sorusu motorun sıralama ve mesafe kurallarına bağlıdır ( Raycast). Bu yüzden çoklu isabet listesini yalnızca «ilk gelen»e bırakmak yerine tasarımda netleştirin: en yakın mesafe, katman maskesi, etiket önceliği veya küçük nesneye verilen bonus gibi kurallar dokümante edilmeli; aksi halde küçük bir düğme zeminin arkasında sürekli kaybolur. Bu bölüm dolaylı / doğrudan ayrımını (bölüm 1) tekrar etmez; yalnızca geometrik isabet çizgisini tanımlar.

Üzerinde gezinme

Vurgu rengi veya ölçek için her kare kesişim sorgusu işe yarar; fakat oyun mantığına her kare «hover» olayı basmak log ve ağ gürültüsü üretir. Hedef örgü kimliği değiştiğinde yalnızca hover enter ve leave yaymak, menü ve liste okunabilirliğini artırır. Dokunsal kısa titreşim (bölüm 5) bu kutunun dışında tutulmalıdır; burada mesele yalnızca hangi sıklıkta durum güncelleneceğidir.

Tutma ve fizik bağlantısı

Nesneyi görsel olarak ele parent etmek ile Physics impostor dönüşümünü o anki el matrisiyle eşlemek aynı iş değildir: örgü duvardan geçerken çarpışma kabuğu bir kare geride kaldıysa kullanıcı «tutuyorum» görürken motor duvara gömülmüş sayar. Tutma başladığında gövdeyi kinematik moda almak, ivmeyi sıfırlamak ve dönüşümü el rig’ine kilitlemek; bırakırken dinamik moda, yer çekimine ve sürtünmeye dönmek yaygın bir üç aşamalı kalıptır. Bu bölüm ışının hangi yüzeye değdiğini (bölüm 2) veya panel önceliğini (bölüm 4) anlatmaz; yalnızca görünen mesh ile fizik temsilinin aynı hikâyeyi izlemesini ister.

  • Görsel: tutulan örgü, tutamacın veya avuç içi referansının beklenen ofsetinde; gerekirse animasyonlu bir «yakalama» süresi ile ani sıçramayı maskeler.
  • Fizik: impostor merkezi ve ölçeği, mesh ile aynı dünya dönüşümünde güncellenir; serbest bırakma anında hızlar sıfırlanıp yeni çarpışma için hazırlanır.
  • Bırakınca: yer çekimi, sürtünme ve isteğe bağlı sürtünme malzemeleri yeniden etkinleşir; bırakma yüzeyinin normaline göre hafif ofset eklemek zemine yapışmayı azaltır.

Sahne içi arayüz ve seçim önceliği

Dünya uzayında duran bir panel ( 3D GUI), arkasındaki duvar veya dekor ile aynı ışın üzerinde yarışır; tarayıcı size otomatik «önce arayüz» sırası vermez. Önceliği kendiniz seçmelisiniz: tipik akış önce panel örgüsüne isabet, sonra panel içinde UV koordinatına göre düğme bölgeleridir; sahne nesnesine yanlışlıkla tıklanmasını istemiyorsanız panel aktifken arkadaki raycast’i kapatmak veya maskelemek de bir tasarım seçimidir. Fullscreen UI katmanında ekran uzayı ayrıldığı için bu yarış azalır — iki modu aynı projede kullanıyorsanız öncelik kurallarını ayrı ayrı dokümante edin. Bu bölüm ışın matematiğini (bölüm 2) veya tutma fizik eşlemesini (bölüm 3) genişletmez; yalnızca dünya içi arayüz ile sahne geometrisinin aynı girdi hattında nasıl sıralanacağını sabitler.

Kısıtlar ve kısa dokunuş geri bildirimi

Serbest sürükleme serbestlik sunar; XR'de titreme ve derinlik algısı birleşince hedefi kaçırma oranı artar. Snap ( ray snapping, ızgaraya oturtma, yalnızca bir düzlemde kaydırma) kullanıcıyı birkaç geçerli duruma indirger ve bölüm 2’deki çoklu isabet belirsizliğini tasarım alanında daraltır. Kısa dokunsal darbe ( haptics) doğru zamanda çok etkilidir; fakat tüm başlıklar ve tarayıcı profilleri aynı yoğunluğu sunmaz, bazılarında hiç yoktur. Bu yüzden snap / bırakma / reddetme anlarını en az bir görsel tik (renk flaşı, ölçek vuruşu) ve isteğe bağlı kısa ses ile yedekleyin; titreşimi «varsa güzel» katmanı olarak düşünün. Bu bölüm isabet sıralamasını (bölüm 2) veya panel önceliğini (bölüm 4) değiştirmez — yalnızca hareket kısıtı ve geri bildirim yedekliliğini kapsar.

Three.js ile üst üste okuma

Çakışmayı önleyen çerçeve

Three.js örneklerinde etkileşim çoğu zaman elle yazılmış ışın, sahne grafı gezintisi ve özel durum makineleriyle birleşir; Babylon.js tarafında benzer soyutlamalar ve hazır XR yardımcıları aynı ihtiyacı farklı API yüzeyinde toplar. Kütüphane değişse de taşımanız gereken zihinsel model kesişim (veya yakınlık) → odak / hover durumu → onaylanmış eylem zinciridir; tek satır kopya yerine her halkada hangi kodun otorite olduğunu seçin. Önceki bölümler zincirin parçalarını ayırır: mod ayrımı (1), isabet kuralı (2), fizik eşlemesi (3), dünya arayüz sırası (4), kısıt ve geri bildirim (5). Three’den geçerken bu sayfayı sözleşme listesi gibi kullanın; hangi motor olursa olsun aynı olayda görsel, işitsel ve — varsa — dokunsal ipucunu birlikte vermek tutarlılığı taşır.

Babylon Z-Axis hattının sonu

Bu başlık Holodepth Babylon Z-Axis zincirinin XR ucudur; diğer konulara ana içerik haritasından dönebilirsiniz. Önceki adım: WebXR setup.