Teknik Meta Immersive Debugger ile Unity'de Gelişmiş Hata Ayıklama

Eagle

İçerik Üreticisi
Developer
Katılım
26 Ekim 2024
Puan
3
XR Başlığı
Quest 2
Meta Immersive Debugger, Unity'de geliştirilen Meta projelerinde hata ayıklama sürecini kolaylaştırmak ve geliştirme döngüsünü hızlandırmak için tasarlanmış etkili bir araçtır. Bu araç, kod yazmayı bilmeyen kullanıcılar için bile kullanımı kolay olacak şekilde geliştirilmiştir ve özellikle karmaşık XR projelerinde büyük avantajlar sağlar.

Hata Ayıklama Sürecindeki Sorunlar

Meta projelerinde genellikle şu yöntemlerle hata ayıklama yapılır:
  1. Fiziksel Cihaz Testi: Projeleri fiziksel bir Meta cihazına yükleyerek test etmek.
  2. Meta Link (Oculus Link): Cihazı bilgisayara bağlayarak IDE hata ayıklayıcılarını kullanmak.
  3. Debug.log Girdileri: Hataların olabileceği yerlere log girişleri eklemek.
  4. Çalışma Zamanı Denetçileri: Unity Asset Store’dan alınan veya özel olarak geliştirilen araçlarla hiyerarşi ve bileşenlerin görünürlüğünü artırmak.
Bu yöntemler zaman alıcıdır ve sınırlı bir hata ayıklama deneyimi sunar. Fiziksel cihaz testleri, cihaz işletim sistemi ve fiziksel ortam farklarından dolayı eksik kalabilir.

Meta Immersive Debugger ile Çözüm

Meta Immersive Debugger, yukarıdaki sorunları çözmek için geliştirilmiştir. Fiziksel bir cihaz yerine simülatör kullanarak geliştirme sürecini hızlandırır. Ayrıca, kod bilgisi olmayan kullanıcıların bile projedeki işlevleri test etmesine olanak tanır.

Geliştirici Olmayanlar için Kolaylık

Immersive Debugger, kodlama bilgisi olmayan kullanıcıların bile hata ayıklama yapmasına olanak tanır. Unity içerisindeki herhangi bir oyun nesnesine "Debug Inspector" bileşeni eklenerek, nesnenin tüm bileşenleri görünür hale getirilebilir.

Hata Ayıklama Araçları

  • Hata Ayıklama Gizmosu: Unity'nin yerleşik Gizmos'larına benzer şekilde çalışır.
  • Değişken Görselleştirme:
    • Vector3 değişkenleri için XYZ ekseni gösterimi.
    • Çizgi, nokta, düzlem veya küp gibi görsellerle veri görselleştirme.
  • Çalışma Zamanında Düzenleme: Değişkenler için kaydırıcılarla değer düzenleme.
    • Minimum ve maksimum değer tanımlanabilir.
  • Kategori Düzeni: Nesne bileşenlerini gruplandırma.

Uygulama Örneği

Örneğin, bir ölçüm uygulamasında, Meta denetleyicilerinden alınan girdilerle noktalar arasında mesafeyi ölçen bir bileşen (MeasureTapeFeature.cs) kullanıyorsanız:
  • Debug Inspector ile bu bileşenin değişkenlerini ve işlevlerini çalışma zamanında görüntüleyebilir ve düzenleyebilirsiniz.
  • Fiziksel cihaz kullanmadan simülatör üzerinde test yapabilirsiniz.
Meta Immersive Debugger, XR projelerinde geliştirme ve hata ayıklama süreçlerini standartlaştırmak ve hızlandırmak için güçlü bir araçtır. Kod yazmayı bilmeyen kullanıcılar için de erişilebilir olan bu araç, ekiplerin daha hızlı ve verimli çalışmasını sağlar.

Öne Çıkan Özellikler

  • Kullanıcı Dostu Arayüz: Unity projelerinde kolayca entegre edilebilir.
  • Simülatör Desteği: Klavye veya fiziksel denetleyicilerle simülatör üzerinde test yapma imkanı sunar.
  • Hata Ayıklama Kontrolleri: Çalışma zamanında değişkenleri ve işlevleri görünür hale getirerek dinamik hata ayıklama yapılmasını sağlar.

Immersive Debugger Kurulumu

  1. Meta XR SDK Yükleme:
    • Unity’nin Paket Yöneticisi aracılığıyla Meta XR All-In-One SDK veya Meta XR Core SDK kurulur.
  2. Immersive Debugger’ı Etkinleştirme:
    • Unity arayüzündeki sağ alt köşeden Meta simgesine tıklayın ve "Immersive Debugger" seçeneğini etkinleştirin.
  3. Geliştirme Yapısını Etkinleştirme:
    • Unity menüsünden Dosya > Yapı Ayarları > Geliştirme Yapısını Etkinleştir seçeneğini işaretleyin.

Kapsamlı Hata Ayıklayıcı​

MetaOptions.png


Yeni veya mevcut projenizde Meta Immersive Debugger'ı kurmak için şu adımları izleyin.

  • Meta XR All-In-One SDK veya Meta XR Core SDK'yı Unity'nin paket yöneticisi aracılığıyla yükleyin
  • Sağ alt köşedeki Meta simgesine > Immersive Debugger'a tıklayın (bkz. Şekil 1.1)
  • Immersive Debugger görünürlüğü için Etkinleştir seçeneğini açın ve kapatın
  • Dosya > Yapı Ayarları > Geliştirme Yapısını Etkinleştir'e gidin
    • Bu adım gereklidir, aksi takdirde Immersive Debugger seçenekleri gösterilmez. Bunu üretimde beğendiyseniz, neyin gerekli olduğunu açıklayan Meta'nın Gelişmiş Kullanımlar dokümanını inceleyin.



Kapsamlı Hata Ayıklayıcı​

ImmersiveDebugger.png

DebugInspector Unity bileşeni (Immersive Debugger'ın bir parçası)

Geliştirici olmayan biri olarak, Unity'deki herhangi bir oyun nesnesine bir `Debug Inspector` bileşeni ekleyebilirsiniz. Bu bileşen, oyun nesnesinin bileşenlerini otomatik olarak algılar ve üyeleri açıp kapatmanıza olanak tanır, böylece bunları bir çalışma zamanı denetçisinde açığa çıkarabilirsiniz (bunun nasıl göründüğünü görmek için Şekil 1.2'ye bakın).

Birkaç temel seçenek mevcuttur, ancak bu seçeneklerin üye türüne göre değişebileceğini unutmayın.
  • Hata Ayıklama Gizmosu: Unity'nin yerleşik Gizmos'larına benzer şekilde, bunlar altta yatan nitelik türüne dayanır. Örneğin, `Axis` niteliğine sahip bir `Vector3` değişkeni `Vector3` konumunda görüntülenecektir.
    • Eksen: XYZ tutamağını görüntüler
    • Nokta: Küçük bir 3D noktayı görüntüler
    • Çizgi: Bir çizgiyi görüntülemenize olanak tanır
    • Çizgiler: çizgiye benzer ancak kaynak bir vektör listesidir
    • Uçak: bir uçak görüntüler
    • Küp, Üst Orta Kutu ve Kutu: tam olarak adlarının önerdiği şeyi gösterir
  • Renk: Çalışma Zamanı Denetçisi alan panelinde görüntülenen RGBA renk seçimi
  • Ayarlanabilir: Bu türü bir kaydırıcıyla düzenlenebilir hale getirir ve bu tür değerini çalışma zamanında değiştirmenize olanak tanır
    • Min: en düşük değer
    • Max: en yüksek değer
  • Kategori: Üyeleri kendi müfettiş alanlarına gruplamanıza olanak tanır

Kapsamlı Hata Ayıklayıcı​

Tamam, bu noktaya kadar, Immersive Debugger'ın ne olduğunu ve Unity oyun nesneleri içinde `DebugInspector` bileşeninin nasıl kullanılacağını öğrendik. Bu harika çünkü kullanıcılara neyin açığa çıkarılıp neyin çıkarılmayacağı konusunda daha fazla kontrol sağlıyor. Peki ya geliştiricilere daha fazla güç vermek? Örneğin, bir kullanıcı arayüzü tasarımcısının işini bitirmesini beklemek zorunda kalmadan, yeni bir özelliği uyguladıktan hemen sonra bunu kullanmak faydalı olmaz mıydı? Kulağa hoş geldiğini biliyorum ve gerçekten de hoş, size bundan sonra göstermek istediğim şey bu.

Bir geliştirici olarak çeşitli seçeneklere erişiminiz var. Tıpkı Non-Devs bölümünde açıkladığım gibi, bunu kod içinde halledebilir veya daha da iyisi, `DebugInspector`'ı kendi `DebugMember` özniteliklerinizle birleştirebilirsiniz. Peki bu `DebugMembers` tam olarak nedir? Son geliştirici videomda yaptığım şeyin bir kesitini göstererek nasıl çalıştıklarını açıklayayım.

Kod:
// measure tape rendering variables
[DebugMember(Category = "MeasureTapeFeature", Tweakable = true, Min = 0.025f, Max = 0.1f)]
[SerializeField] private float tapeWidth = 0.01f;

[DebugMember(Category = "MeasureTapeFeature", Tweakable = true, Min = 0.005f, Max = 0.1f)]
[SerializeField] private float measurementInfoLength = 0.2f;

// controller measuring tape line area variables
[DebugMember(Category = "MeasureTapeFeature", GizmoType = DebugGizmoType.Axis)]
[SerializeField] private Transform leftControllerTapeArea;

[DebugMember(Category = "MeasureTapeFeature", GizmoType = DebugGizmoType.Axis)]
[SerializeField] private Transform rightControllerTapeArea;

// tape lines clearing method
[DebugMember(Category = "MeasureTapeFeature")]
public void ClearAllLines()
{
    foreach (var tapeLine in savedTapeLines)
    {
        Destroy(tapeLine.TapeLine);
    }
    savedTapeLines.Clear();
}

Tamam, yukarıda sahip olduklarımızı parçalayalım. `DebugMember` niteliği, daha önce Unity Inspector'da kullandığımız niteliğe benzer, ancak burada her üyeyi bu nitelik ve bir dizi seçenekle süslüyoruz. `tapeWidth` ve `measurementInfoLength` değişkenleri `float` türündedir. Bu değişkenler, Productivity App'in çizgilerin kalınlığını ve ölçüm etiketinin ofsetini belirlemesine yardımcı olur. `Tweakable=true` değerini ayarlayarak, Immersive Debugger'a çalıştırdığımızda bu alanları düzenlenebilir kaydırıcılar olarak eklemesini talimatlandırıyoruz. `Category`, çalışma zamanı denetçisindeki gruplamalar için kullanılır ve `Min` ve `Max` değer kısıtlamalarını tanımlar.

Sonra, ikisi de dönüşüm olan `leftControllerTapeArea` ve `rightControllerTapeArea`'mız var. Bunları `Axis` türünde bir Debug Gizmo'ya sahip olacak şekilde ayarladık, böylece Immersive Debugger çalıştığında, bunların görünürlüğünü açıp kapatma seçeneğiniz olacak ve bu da her biri için bir Axis Gizmo'su oluşturacak.

Son olarak, `ClearAllLines` bir yöntemdir. Şaşırtıcı gelebilir, ancak yöntemleri de açığa çıkarabilirsiniz. Bu durumda, Immersive Debugger'a bu yöntemi açığa çıkarmasını söylüyoruz, bu da "ClearAllLines" adında bir düğme oluşturacak ve bunu doğrudan yürütmenize olanak tanıyacaktır.

Kapsamlı Hata Ayıklayıcı​

Immersive Debugger'ı test ederken beni çok heyecanlandıran bir özellik günlük kaydı yetenekleriydi. XR geliştirme kariyerim boyunca kaç kez çalışma zamanında hata ayıklama bilgilerini görüntülemek için özel bir kullanıcı arayüzü günlüğü yazmak zorunda kaldığımı sayamam—dürüst olmak gerekirse, sayısını unuttum. Neyse, Meta, Immersive Debugger'da Unity günlüklerinizin tam bir kopyasını, hata ayıklama bilgileri, hata ayıklama uyarıları, hata ayıklama hataları ve hatta Unity'de gördüklerinizle eşleşen simgeler ve yığın izleriyle birlikte ekledi.

Peki, bu günlüklere nasıl yazıyorsunuz? İşte en iyi kısım: `YourLogger.Instance.LogInfo` veya `MyCoolLogger.Instance.Log` gibi özel uygulamaya veya özel günlükleme yöntemlerine gerek yok. Bunun yerine, yerleşik `Debug.Log`, `Debug.LogWarning` ve `Debug.LogError`'ı kullanırsınız. Aşağıda bu işlevi test ederken kullandığım bir örnek bulunmaktadır.


Console.png


Kod:
[DebugMember(Category = "MenuInteraction")]
private void AddLevelerFeature()
{
   Instantiate(levelerFeaturePrefab);
   Debug.Log("New leveler feature(tool) has been added");
}

[DebugMember(Category = "MenuInteraction")]
private void ClearAllTapeLines()
{
   MeasureTapeFeature.Instance.ClearAllLines();
   Debug.Log("All tape lines were removed");
}


ImmersiveDebugger_LogOptions.png

 
Geri