e
sv

Unity projenizi Debug.Log ile optimize etme

avatar

Yazılım Method

  • e 0

    Mutlu

  • e 0

    Eğlenmiş

  • e 0

    Şaşırmış

  • e 0

    Kızgın

  • e 0

    Üzgün

Yani Unity motorunu kullanarak bir oyun mu yapmak istiyorsunuz? Oturup oluşturmak istediğiniz oyunu tasarladınız, küçük bir proje yönetim kurulu oluşturdunuz ve oyununuzu yürütmek için gereken mantığı uygulamaya başladınız.

Oynat düğmesine birkaç kez bastınız ve temel işlevsellik için oluşturduğunuz komut dosyalarının birkaçını test ettiniz ve şimdi biraz daha karmaşık bir şey üzerinde çalışıyorsunuz, Oynat'a ve IDE'nize (Entegre Geliştirme Ortamı) yolunuza herhangi bir hata göndermedi.

Kodum Çalışıyor Ama Nasıl Gandalf Meme

Her şey yolunda görünüyor ve oyun çalışıyor, ancak bir şeyler tam olarak doğru değil. Almayı beklediğiniz verileri almıyorsunuz veya sadece ihtiyacınız olan sonuçları alamıyorsunuz. Bu, Unity'ye yeni başlayan biri için çok sinir bozucu olabilir, ancak bu makale, Unity projenizde Debug.Log deyimini kullanarak hata ayıklama sürecini tamamlamanıza yardımcı olacaktır.

Debug.Log deyimini kullanabileceğiniz farklı yolları inceleyeceğiz, çıktıyı daha okunabilir olacak şekilde biçimlendireceğiz ve Debug.Log deyimini etkili bir şekilde kullandığınızdan emin olmak için birkaç yola bakacağız.

Bu makale için Unity motor arayüzüne aşina olduğunuzu ve ilk komut dosyanızı zaten yazdığınızı varsayacağım. İfadelerin kullanımını göstermek için çok basit bir proje oluşturacağız, ancak ilerledikçe ekran görüntüleri ve sürecin bir açıklamasını ekleyeceğim.

Temel projenin ayarlanması

Bu makale için Unity 2021.3.4f1'de bir 3D proje oluşturacağım ancak kullandığınız Unity motorunun sürümü önemli olmayacak. VS Community 2019'u da kullanacağım, bu nedenle VS Code veya Rider IDE kullanıyorsanız birkaç arayüz farklılığı fark edebilirsiniz, ancak burada gösterilen ilkeler herhangi bir IDE için geçerli olacaktır.

Aşağıdaki sahnede bir uçak ve birkaç ilkel nesnem var. Bu nesnelerin her birinin benzersiz bir adı (ilkel türleri), dönüşümü ve komut dosyası vardır. Sırasıyla 1 (Küre), 2 (Küp), 3 (Kapsül) ve 4 (Silindir) olarak numaralandırılacaktır.

İsimli Nesneler

Daha sonra, komut dosyalarım için bir klasör, bir GameManager komut dosyası ve Hiyerarşi içinde yeni oluşturduğum GameManager komut dosyasını içerecek bir GameManager oyun nesnesi oluşturdum.

GameManager Komut Dosyası Nesnesi

Daha sonra GameManager.cs komut dosyasını Hiyerarşide oluşturduğum oyun nesnesine sürükledim veya oynat düğmesine bastığımızda çalışacak olan oyun nesnesine atadım. Artık hazır olduğumuza göre, Debug.Log ifadesinin temel kullanımına bakabiliriz.

Komut Dosyasından Oyun Nesnesine

Debug.Log ifadesi nasıl kullanılır?

Test GameManager oyun nesnesine atanmış GameManager komut dosyasına sahip olduğumuza göre, ihtiyacımız olduğunda çalıştığını test etmek için ilk Debug.Log ekleyebiliriz.

Debug.Log ifadesinin sözdizimi sağdaki ekranda görüldüğü gibidir. Burada sadece “Debug.Log(”Hello!);” belirttim. ve bu ifadeyi Start yöntemimize eklediğim için, oyunumuzu çalıştırdığımızda bu bir kez çalışmalıdır:

 System.Collections'ı kullanarak;
System.Collections.Generic kullanarak;
UnityEngine'i kullanarak;

genel sınıf GameManager: MonoBehaviour
{
    // Start, ilk çerçeve güncellemesinden önce çağrılır
    geçersiz Başlat()
    {
        Debug.Log("Merhaba!");
    }

    // Güncelleme çerçeve başına bir kez çağrılır
    geçersiz Güncelleme()
    {

    }
}

Devam edip Unity Editor'da Oynat düğmesine basarsak, “Merhaba!” kelimesini göreceksiniz. Editör Konsolu penceresinde yazdırılır.

Merhaba Dünya Birlik Editörü

Artık Debug.Log deyimini kullanarak konsola basit metin çıktısı alabiliyoruz, ancak hata ayıklama sırasında hala bizim için o kadar değerli değil. O halde oyunumuzu başlattığımızda oluşturduğumuz belirli bir değişkenin değerini görüntülemeyi deneyelim.

Bunu yapmak için GameManager.cs testValue adında (aşağıda görüldüğü gibi) özel bir tamsayı oluşturdum ve ona Start işlevinde bir değer atadım. Ayrıca, metni ve testValue birleştirerek ve + işaretiyle ayırarak daha karmaşık bir Debug.Log ifadesi oluşturabildiğimi de not edebilirsiniz. Konsol penceresinde biraz boşluk oluşturmak için basit metnin son karakteri ile değişken arasına bir boşluk karakteri eklediğimi de fark edeceksiniz:

 System.Collections'ı kullanarak;
System.Collections.Generic kullanarak;
UnityEngine'i kullanarak;

genel sınıf GameManager: MonoBehaviour
{
    özel int testValue;

    // Start, ilk çerçeve güncellemesinden önce çağrılır
    geçersiz Başlat()
    {
        testDeğeri = 1000;
        Debug.Log("Bu, testValue'nun değeridir: " + testValue);
    }

    // Güncelleme çerçeve başına bir kez çağrılır
    geçersiz Güncelleme()
    {

    }
}

Komut dosyamızı kaydedelim ve konsoldaki çıktının ne olacağını görmek için Unity editörüne geri dönelim.

Test Değeri 1000

Harika! Artık Console penceresindeki çıktıyı daha iyi anlamamız için eklediğimiz küçük metnin yanı sıra testValue atanan değerini görebiliriz.

Bir oyun nesnesinin adını belirlemek için Debug.Log ifadesini kullanma

Komut dosyamızdaki bir oyun nesnesine bir başvuru oluşturalım, bunu Unity Düzenleyicisi içindeki komut dosyasına ekleyelim ve ardından bu nesnenin adını çıkarmak için Debug.Log ifadesini kullanalım:

 System.Collections'ı kullanarak;
System.Collections.Generic kullanarak;
UnityEngine'i kullanarak;

genel sınıf GameManager: MonoBehaviour
{
    genel GameObject testObject;

    geçersiz Uyanık()
    {
        Debug.Log(testObject.name);
    }
}

Nesneyi GameManager.cs komut dosyasındaki oyun nesnesi alanına, Unity Düzenleyicisi'nde ekledikten sonra, Oynat'a basabileceksiniz ve başvurulan oyun nesnesinin adı düzenleyicide gösterilecektir.

Gösterilen Nesnenin Adı

Koşullu bir değerin değerini belirlemek için Debug.Log deyimini kullanma

Bir koşullu veya bir Boolean'ın değerini belirlemek için Debug.Log ifadesini de kullanabiliriz. İki tamsayı değeri oluşturalım ve sonra aynı olup olmadıklarını kontrol edelim. Bunu yapmak için, iki tamsayı ( a ve b ) bildirdim ve başlattım ve eşit olup olmadıklarını kontrol etmek için bir Debug.Log ifadesi kullandım:

 System.Collections'ı kullanarak;
System.Collections.Generic kullanarak;
UnityEngine'i kullanarak;

genel sınıf GameManager: MonoBehaviour
{
    özel int a = 51;
    özel int b = 62;

    geçersiz Uyanık()
    {
        Debug.Log(a == b);
    }
}

a ile b aynı olmadığı için konsolun çıktısı beklendiği gibi olur.

Yanlış Mesaj

Bir işlevin ne zaman çağrıldığını belirlemek için Debug.Log ifadesini kullanma

Önceki bölümde, basit bir Debug.Log ifadesinin sözdizimini öğrendik ve ifadeye bir değişken değeri ekledik. Çıktıyı konsola da görebildik. Bu bölümde, belirli Unity işlevlerinin zamanlamasına ve özel bir işlevin çağrıldığını nasıl anlayacağıma bakacağım.

Aşağıdakiler, olay işlevleri için yürütme sırasına ilişkin resmi Unity belgelerinden alınmıştır.

Unity komut dosyası işlevleri, komut dosyanız çalıştırıldığında belirli bir sırayla yürütülür ve hata ayıklama sırasında belirli bir olayın veya işlevin ne zaman tetiklendiğini görmek gerçekten değerli olabilir. Unity tarafından sağlanan aşağıdaki akış şemasına bir göz atalım.

Aşağıdaki şemadan, Unity betiği çalıştırıldığında ilk çağrılan fonksiyonun Awake fonksiyonunun olduğunu görebiliriz. Ardından sırayla çalışan OnEnable ve Start yöntemlerine sahibiz.

Fonksiyonları Gösteren Diyagram

Bu sırayı basit bir komut dosyası ve birkaç Debug.Log ifadesinin eklenmesiyle test edelim. Bir testValue tamsayısı ekledim ve ardından her Debug.Log ifadesini özelleştirdim, böylece her birinin nerede çalıştırıldığını bilebiliriz. Her Debug.Log ifadesinin üzerindeki ifade, testValue değerini artırır:

 System.Collections'ı kullanarak;
System.Collections.Generic kullanarak;
UnityEngine'i kullanarak;

genel sınıf GameManager: MonoBehaviour
{
    özel int testValue = 0;

    özel boşluk Uyanık()
    {
        testValue++;
        Debug.Log("Bu, Awake yönteminde çalıştırıldı: " + testValue);
    }

    özel geçersiz OnEnable()
    {
        testValue++;
        Debug.Log("Bu, OnEnable yönteminde çalıştırıldı: " + testValue);
    }

    özel boşluk Başlat()
    {
        testValue++;
        Debug.Log("Bu, Başlat yönteminde çalıştırıldı: " + testValue);
    }
}

Bakalım Play butonuna bastığımızda Console penceresinde neler oluyor.

Harika! Önce Awake yönteminin, ardından OnEnable yönteminin ve ardından Start yönteminin çalıştığını görebiliriz. Ayrıca Play butonuna bastığımızda bu yöntemlerin her birinin yalnızca bir kez çalıştığını görebiliriz.

Üç Mesaj

Şimdi, kendi Debug.Log ifadesini içerecek olan OurOwnFunction adlı özel bir işlev oluşturalım. Bu işlevi diğer Unity işlevlerinden ikisinde çağıracağız ve çıktının ne olduğunu göreceğiz:

 System.Collections'ı kullanarak;
System.Collections.Generic kullanarak;
UnityEngine'i kullanarak;

genel sınıf GameManager: MonoBehaviour
{
    özel int testValue = 0;

    özel boşluk Uyanık()
    {
        testValue++;
        Debug.Log("Bu, Awake yönteminde çalıştırıldı: " + testValue);
        OurOwnFunction();
    }

    özel geçersiz OnEnable()
    {
        testValue++;
        Debug.Log("Bu, OnEnable yönteminde çalıştırıldı: " + testValue);
    }

    özel boşluk Başlat()
    {
        testValue++;
        Debug.Log("Bu, Başlat yönteminde çalıştırıldı: " + testValue);
        OurOwnFunction();
    }

    özel geçersiz OurOwnFunction()
    {
        Debug.Log("Bu özel fonksiyon çağrısıdır!");
    }
}

Konsoldaki çıktı aşağıda gösterilmiştir ve şimdi özel fonksiyonumuzun sırasıyla Awake ve Start fonksiyonlarında çağrıldığını görebiliriz.

Beş Mesaj

Diğer hata ayıklama mesajları türleri

Şimdi, Debug.Log deyimini kullanabileceğimiz yollara baktık, ancak kullanabileceğimiz başka hata ayıklama deyimleri kategorileri de var. Bu ifadeler, Debug.Log ifadesinin kullanıldığı şekilde kullanılır, ancak Unity Konsolunda uyarıları veya hataları görüntülememize izin verir:

 System.Collections'ı kullanarak;
System.Collections.Generic kullanarak;
UnityEngine'i kullanarak;

genel sınıf GameManager: MonoBehaviour
{
    geçersiz Başlat()
    {
        Debug.Log("Bu normal bir günlüktür.");
        Debug.LogWarning("Bu bir uyarı mesajıdır.");
        Debug.LogError("Bu bir hata mesajıdır.");
    }
}

Ve burada yukarıdakilerin çıktısına sahibiz.

Çıktı Mesajları

Sonuç olarak

Debug ifadesinin kullanılması, çalışma zamanında belirli değişkenlerin veya nesnelerin değerinin ne olduğunu görmede, bir işlevin gerçekten nasıl ve ne zaman çalışıp çalışmadığını belirlemede ve hatta sinir bozucu bir hatayı izlemede çok yardımcı olabilir.

Umarım bunu faydalı bulmuşsunuzdur ve Debug ifadelerini projenizde daha etkin bir şekilde kullanabilirsiniz. Artık kullanılmadıklarında bunları kaldırmayı veya yorumlara dönüştürmeyi unutmayın ve bir sonraki büyük oyununuzdan çıkmak için hata ayıklamaya hazırsınız.

Unity projenizi <code>Debug.Log</code> ile optimize etme yazısı ilk olarak LogRocket Blog'da göründü.

etiketlerETİKETLER
Üzgünüm, bu içerik için hiç etiket bulunmuyor.

Sıradaki içerik:

Unity projenizi Debug.Log ile optimize etme