Çarpışmaları ve Yanlış Yerleştirmeyi Önleyen Mobilya Yerleştirme Önizlemeleri Nasıl Tasarlanır?
Bir dekorasyon oyununda mobilya önizlemesi, oyuncu onaylamadan önce üç soruyu yanıtlamalıdır: eşya nereye konacak, bu konuma izin veriliyor mu ve oyuncu döndürür ya da iptal ederse ne olacak? Eşyanın canlı bir "hayalet" (ghost) modelini kullanın, mevcut konumunda ve dönüş açısında kapladığı alanı (footprint) doğrulayın ve yerleştirme engellendiğinde net bir neden gösterin. Önizlemeyi onay anına kadar görünür tutun ve iptal etme durumunda hiçbir şey yerleştirmeden oyuncunun odaya dönmesini sağlayın. Bu kılavuz, oyun geliştiricileri için söz konusu yerleştirme etkileşimini tasarlamaya odaklanmaktadır.
Önizleme neleri iletmelidir?
Önizlemeyi yalnızca bir imleç işaretçisi olarak değil, nihai mobilyanın geçici bir versiyonu olarak ele alın. Eşyanın boyutunu, yönünü, zemin veya destek yüzeyiyle temas noktasını ve yerleştirme durumunu göstermelidir. Google'ın ARCore tasarım kılavuzu, hedef noktanın nesneyle veya gölgesiyle görselleştirilmesini ve bir yüzey algılandığında zamanında geri bildirim verilmesini önerir. AR yerleştirmesi bir dekorasyon oyunundan farklı kısıtlamalara sahip olsa da aynı ilke geçerlidir: oyuncuların onaylamadan önce bir eşyanın nereye gideceğini görmeleri gerekir. Google'ın ARCore içerik yerleştirme kılavuzu
Kullanışlı bir önizlemenin anlaşılır üç durumu vardır: geçerli, geçersiz ve çözümlenmemiş. Geçerli, önerilen yerleşimin oyunun kurallarına uygun olduğu anlamına gelir. Geçersiz; başka bir eşyayla çakışma veya desteklenmeyen bir yüzey gibi bilinen bir kuralın çiğnendiğini gösterir. Çözümlenmemiş ise, muhtemelen zemin mobilyası yerleştirilirken imlecin bir duvarın üzerinde olması nedeniyle oyunun henüz geçerli bir hedef belirleyemediği anlamına gelir. Yalnızca çarpışma denetiminde hiçbir şey bulunamadı diye çözümlenmemiş durumu geçerli olarak sunmayın; "çarpışma algılanmadı" ile "buraya yerleştirilebilir" aynı sonuç değildir.
Geçerlilik çarpışma algılamasından nasıl farklı olmalıdır?
Çarpışma, yerleştirme geçerliliğinin yalnızca bir parçasıdır. Bir kanepe başka bir nesneyle kesişmeyebilir ancak yine de odanın dışında kalabilir, zeminin üzerinde havada durabilir, kullanılamaz bir yöne bakabilir veya oyunun kurallarına göre bir kapı aralığını engelleyebilir. Her mobilya kategorisi için geçerliliği bir kısıtlamalar kontrol listesi olarak tanımlayın: izin verilen destek yüzeyi, oda sınırı, çarpışma, yön sınırlamaları ve oyunun zorunlu kıldığı bilinçli erişim veya etkileşim boşlukları.
Kesin kuralları tercihlerden ayrı tutun. Bir çarpışma veya desteklenmeyen bir yüzey onaylamayı engelleyebilir. Dar bir geçiş yolu ise oyun izin veriyorsa esnek bir uyarı olabilir. Bu ayrım, dekoratif bir önerinin kesin bir hata gibi görünmesini önler ve oyuncuların hangi koşulları kabul etmeyi seçebileceklerini anlamalarını sağlar. Mobilya yerleşim sistemleri üzerine yapılan araştırmalar da düzenlemeleri yalnızca geometri yerine birden fazla yerleşim kuralıyla yönlendirilen süreçler olarak ele alır; Stanford'ın yayımlanan sistemi iç mimarlık yönergelerini dâhil etmiş ve önerilen düzenleri katılımcılarla değerlendirmiştir. Bu durum, belirli bir oyun arayüzü dikte etmese de çarpışmadan daha fazlasını göz önünde bulundurmayı desteklemektedir. Stanford'ın İnteraktif Mobilya Yerleşimi çalışması
Teknik kontrol, önizlemenin dönüştürülmüş taban alanı (footprint) ile eşleşmelidir. Unreal Engine'in overlap API'si, sağlanan bir çarpışma şeklinin belirtilen konum ve dönüşte kontrol edilmesini tanımlarken, Unity 6'nın Physics.OverlapBox işlevi bir merkez, yarı boyutlar (half extents), yönelim, katman maskesi ve tetikleyici davranışını kabul eder. Bu API'ler, bir dönüş açısı değişikliğinin neden döndürülmüş şekle karşı bir kontrolü tetiklemesi gerektiğini gösterir. Motor davranışları ve API ayrıntıları sürüme göre değişir; oyunla birlikte fiilen dağıtılan motor sürümüne ve çarpışma kurulumuna ait belgeleri kullanın. Unreal Engine overlap API ve Unity 6 Physics.OverlapBox
Geçerli ve geçersiz konumlar nasıl görünmelidir?
Görünümü destekleyici ek bir ipucuyla eşleştirin. Örneğin, hayalet modelin renk tonunu ve dış çizgisini değiştirin ve "Yerleştirmeye hazır" veya "Masayla çakışıyor" gibi kısa bir durum gösterin. Özellikle değişken zeminlerde veya aydınlatma koşullarında rengi tek başına ayırt etmek zor olabilir. Oyuncunun konumunu ve dönüşünü değerlendirebilmesi için mobilyanın siluetini her iki durumda da görünür tutun. Engellemeye belirli bir çarpıştırıcı (collider) neden olduysa, bunu belirtmek sorunun çözülmesine yardımcı olabilir; ancak anlaşılır dilde tek bir neden yeterliyken önizlemeyi her teknik ayrıntıyla boğmaktan kaçının.
Durumun yalnızca onay düğmesine basıldıktan sonra değil, mobilya hareket ettikçe güncellenmesini sağlayın. Onaylandığında, mobilyayı yalnızca mevcut durum geçerliyse yerleştirin ve işlemin başarılı olduğuna dair kısa bir bildirim verin. Geçersizse, önizlemeyi aktif tutun ve oyuncunun etkileşimi yeniden başlatmadan ayarlayabilmesi için nedenini belirtin. Bu, yanlışlıkla yerleştirmeyi önleme hedefinden ve Google'ın hataları net bir şekilde iletme ve uygulanabilir bir çözüm yolu sağlama yönündeki kılavuzundan çıkarılan bir tasarım önerisidir. Google'ın hata durumu kılavuzu
Nedenini açıklamadan tüm hayalet modeli geçerli ve geçersiz arasında değiştiren tek bir eşiğe güvenmekten kaçının. Örneğin, bir sandalye duvara çok yakınsa, oyuncu gerçek taban alanını görmeli ve "Oda dışında" veya "Duvarla çakışıyor" gibi özel bir ipucu almalıdır. Kural yalnızca bir tercihse, bunu uyarı olarak etiketleyin ve oyunun tasarımına uygunsa onaylama seçeneğini kullanılabilir durumda tutun.
Döndürme işlemi nasıl bir geri bildirim sağlamalıdır?
Döndürme sırasında önizlemeyi oyuncunun girdisine bağlı tutun ve yeni açıda tekrar doğrulayın. Eşyanın merkezi neredeyse hiç hareket etmese bile taban alanı yakındaki bir nesnenin içine doğru kayabilir. Bir döndürme kontrolü ayrıca yönü ve değişim miktarını öngörülebilir kılmalıdır: görünür bir döndürme istemi, adımlı döndürme için net bir artış değeri veya sürekli bir döndürme göstergesi girdinin ne yapacağını iletebilir.
Döndürmeden sonra hem hayalet modeli hem de tüm yönelim ipuçlarını güncelleyin. Zemine bakan küçük bir ok, ön işaretçi veya görünür bir ön kenar, bir kanepenin veya masanın hangi yöne bakacağını anlamayı kolaylaştırabilir. Mobilya bir ızgaraya veya sabit artışlara oturuyorsa (snapping), yalnızca hizalanmamış imleç konumunu değil, önizlemede oturmuş nihai sonucu gösterin. Bu, oyuncunun fiilen onaylanacak yerleşimi değerlendirmesine olanak tanır.
İptal etme ve eski duruma getirme nasıl çalışmalıdır?
Bir eşyayı taşırken, tutarlı ve görünür bir kontrol aracılığıyla iptal etme seçeneğini erişilebilir kılın. İptal işlemi, hayalet modeli kaldırmalı ve mobilyaları sessizce yerleştirmeden, silmeden veya taşımadan önceki oda durumuna geri dönmelidir. Oyuncu işleme önceden yerleştirilmiş bir eşyayı taşıyarak başladıysa, iptal işlemi onu orijinal konumuna geri döndürmelidir; bu, herhangi bir oyun motoru API'si tarafından garanti edilen bir davranış değil, önerilen bir etkileşim kuralıdır.
Onaylama ve iptal etme eylemleri farklı etiketlere veya simgelere ihtiyaç duyar ve biri seçilene kadar önizleme kalmalıdır. Bir yerleştirme engellendiğinde, oyuncuyu tahminde bulunmaya zorlamak yerine küçük bir sonraki adım gösterin: taşıyın, döndürün veya iptal edin. Google'ın yerleştirme kılavuzu da benzer şekilde net hata geri bildirimi ve bir çözüm yolu önerirken, kullanıcıların sürükleme hareketini kullanmadan önce yönlendirmeye ihtiyaç duyabileceğini belirtmektedir. Oyunlar için, ilgili kontrolü yalnızca ayrı bir yardım ekranında değil, mobilya alındığı anda gösterin. Google'ın manuel yerleştirme kılavuzu
Uygulamalı bir örnek: kitaplık yerleştirme
Bir oyuncunun duvarın yanına bir kitaplık yerleştirdiğini hayal edin. Önizleme önce bir zemin hedefi bulur ve kitaplığı duvara yaslar. Taban alanı bir yan sehpayla çakışır, bu nedenle hayalet model geçersiz bir durum ve "Yan sehpayla çakışıyor" uyarısını gösterir. Oyuncu eşyayı döndürür; taban alanı yeni açıda yeniden hesaplanır ve önizleme artık çakışma olmadan sığar. Öne bakan bir işaretçi, hangi tarafın odaya bakacağını doğrular. Oyuncu "Yerleştirmeye hazır" ifadesini görür, onaylar ve eşya hayalet model tarafından gösterilen konumda belirir.
Kitaplık bunun yerine kısmen oda sınırının dışına taşarsa, oyun herhangi bir nesne çarpışması olmasa bile bu kısıtlamayı tespit etmelidir. Hedef yüzey belirlenemiyorsa, "Zemine yerleştirin" gibi nötr, çözümlenmemiş bir ipucu gösterin ve onaylamaya izin vermeyin. Bu mesajlar yalnızca açıklayıcı örneklerdir; Metlivi özelliklerine dair iddialar veya ölçülmüş bir kullanılabilirlik sonucu değildir.
Pratik bir tasarım kontrol listesi
Uygulamaya geçmeden önce, eşya türüne göre yerleştirme kurallarını yazın ve hangilerinin engelleyici, hangilerinin uyarı olduğunu belirleyin. Ardından önizlemenin yerleştirilen nesneyle aynı taban alanını, dönüşü, hizalamayı (snapping) ve destek noktasını kullandığını doğrulayın. Duvar kenarlarında, köşelerde, dar boşluklarda ve döndürme sonrasında etkileşimi kontrol edin; hayalet modelin nihai yerleştirmenin reddedeceği bir konumu geçerli kılmadığından emin olun. Son olarak, tüm döngüyü test edin: alma, taşıma, döndürme, geçersiz bir noktadan kurtulma, yerleştirme ve iptal etme (mevcut mobilyayı yeniden konumlandırırken iptal etme dâhil).
Karar kuralı oldukça basittir: önerilen kesin sonucu gösterin, geçerli durumları geçersiz ve çözümlenmemiş durumlardan ayırt edin, en faydalı engelleme nedenini açıklayın ve döndürmek, ayarlamak, onaylamak veya iptal etmek için öngörülebilir bir rota sağlayın. Bu, yerleştirme önizlemesini son saniye uyarısı olmaktan çıkarıp pratik bir karar desteği hâline getirir.
