Bir Unreal Engine (UE) projesini yalnızca Blueprint veya C++ kullanarak oluşturabilirsiniz ancak çoğu proje ikisinin bir karışımını kullanmaktan da faydalanır. Peki projeniz için en iyi Blueprint ve C++ karışımına nasıl karar vereceksiniz? Bu dokümanda bu soruyu cevaplamaya dair bilgiler verilmektedir.
Programlama ve Kodlama
Blueprint ve C++ dillerinin ne zaman kullanılacağını en iyi şekilde bilmek için öncelikle programlama ile kodlama arasındaki farkı anlamanız gerekir.
Programlama: Sistemleri tanımlayan talimatlardır.
Kodlama: Var olan sistemlerle arayüzler oluşturarak davranışları tanımlayan talimatlardır.
Örneğin, hızlanma ve direksiyon gibi temel işlevselliği gerçekleştiren bir araç sistemi tanımlamak için programlamayı, araba veya tekne gibi belirli araç türlerini tanımlamak içinse kodlamayı kullanabilirsiniz.
Bu bağlamda C++ bir programlama dili, Blueprint ise bir kodlama dilidir. Ancak C++ dilini davranış tanımlamak veya Blueprint’i sistem tanımlamak için de kullanabildiğiniz için bu ayrım belirgin değildir. Ayrıca, projelerde programlama ile kodlama arasındaki çizgilerin bulanıklaştığı durumlar vardır ve ikisi arasındaki en iyi ayrım, senaryoya bağlı olarak değişir.
Blueprint, kullanıma açılan UE fonksiyonlarıyla arayüz oluşturarak bir kodlama dili gibi çalışır. Benzer şekilde özel fonksiyonlarınızı Blueprint’lerin kullanımına açabilirsiniz. Daha fazla bilgi için Combining Blueprints and C++ (Blueprint’ler ile C++ Dillerini Birlikte Kullanma) bölümüne bakın.
Blueprint ile C++ Karşılaştırması
Her proje ve takım kendine özgü olduğundan Blueprint veya C++ kullanmaya karar verirken kesin bir “doğru karar” yoktur ancak bunları kullanmadan önce güçlü yönlerini düşünmenizi öneririz.
Blueprint’in Güçlü Yönleri
Kodlama: Blueprint, davranışları daha kolay tanımlayabilir.
Daha Hızlı Yineleme: Blueprint sınıflarını oluşturmak, değiştirmek, derlemek ve test etmek daha hızlı olduğundan Blueprint, prototip oluşturmak için mükemmeldir.
Daha Geniş Erişilebilirlik: Blueprint’in görsel akış temsilinin anlaşılması ve kullanılması daha kolay olduğundan Blueprint’e görsel odaklı programcılar veya tasarımcılar ve ressamlar gibi programcı olmayan kişiler daha kolay erişebilir.
Daha İyi Keşfedilebilirlik: Blueprint ile API ve öğe referanslarını bulup eklemek daha kolaydır.
Daha Güvenli Bellek Modeli: Blueprint’leri, kilitlenmeleri önlemek için güvenli bir bellek modeline sahip olacak şekilde tasarladık.
C++’ın Güçlü Yönleri
Programlama: C++, yeni sistemleri daha kolay bir şekilde derleyebilir.
Daha Hızlı Çalışma Zamanı Performansı: C++ daha iyi performans gösterir ancak önemi, bağlama göre farklılık gösterir. Daha ayrıntılı bilgi için aşağıdaki Performans Konuları bölümüne bakın.
Daha Geniş Erişim: C++ daha düşük seviyeli UE işlevselliklerine erişebilir.
Daha Kapsamlı Genişletilebilirlik: C++ ile harici sistemler ve kütüphaneler oluşturabilir ve bunlarla arayüz oluşturabilirsiniz.
Daha İyi Kontrol: C++ sistemler, kaynaklar ve karmaşık algoritmalar üzerinde düşük seviyeli kontrol sağlar.
Daha Kolay İşbirliği: C++ metin olarak depolandığından projeler arasında ayırt edilmesi, birleştirilmesi ve paylaşılması daha kolaydır. Ancak Blueprint’lerle Unreal Fark Aracı’nı kullanabilirsiniz.
Daha İyi Ölçeklenebilirlik: Büyük C++ dosyalarını değiştirmek, büyük Blueprint grafiklerini değiştirmekten daha kolaydır.
Daha İyi Hata Ayıklama: C++ için Blueprint Hata Ayıklayıcısı’ndan daha güçlü hata ayıklama araçları mevcuttur.
Performans Konuları
Temel olarak C++, Blueprint’ten daha iyi performans gösterir çünkü:
C++ doğrudan CPU üzerinde yürütülen makine kodu biçiminde derleme yapar.
Blueprint’ler ise bir sanal makine üzerinden yürütülen bayt kodu biçiminde derleme yapar.
Yani Blueprint’ler ilave kod yürütme yüküne sahiptir. Ancak Blueprint ve C++ performans farklılıkları genellikle önemsizdir ve bağlama göre değişir. Aşağıdaki örneklerde en fazla etkiyi bekleyebileceğiniz bağlamlar verilmiştir:
Temel, düşük seviyeli altyapı.
Yoğun bir şekilde G/Ç veya işleme kaynaklarını kullanan sıkı döngüler.
Büyük veri kümelerini işleyen sistemler.
Çok sayıda örneği olan tik bağımlı sınıflar.
Çoklu iş parçacığı oluşturmadan faydalanan senaryolar (Blueprint bunları desteklemez).
Performansı artırmak için, Blueprint’lerde çalışma planlarken tik kullanmak yerine zamanlayıcıları veya temsilcileri kullanın.
Blueprint kullanıyor ve performans sorunları yaşıyorsanız Unreal Insights ile projenizin profilini oluşturun ve Blueprint’inizi C++’a dönüştürmeden önce en önemli sorunları iyileştirin.
Blueprint ile C++ Dillerini Birlikte Kullanma
Blueprint ile C++’ı birleştirmeye yönelik en iyi yaklaşım, C++’ı bir temel olarak kullanıp üzerine Blueprint sınıfları derlemektir. Uygulamada bu, C++’ı Blueprint’lerden kullanılabilmesi için kullanıma açmak anlamına gelir.
C++’ı aşağıdaki metotlarla Blueprint’te kullanıma açabilirsiniz:
C++ sınıfını genişleten bir Blueprint sınıfı oluşturun ve
UPROPERTY(BlueprintReadWrite)veyaUFUNCTION(BlueprintCallable)gibi Meta Veri Tanımlayıcılar kullanarak belirli öğeleri kullanıma açın.UBlueprintFunctionLibraryfonksiyonunu genişleten bir C++ sınıfı oluşturarak sınıfın statik fonksiyonlarını kullanıma açın.
Çok yaygın olmayan bazı durumlarda Blueprint’i C++’ta kullanıma açmanız gerekebilir. Bunu da aşağıdaki metotlarla yapabilirsiniz:
UFUNCTION(BlueprintImplementableEvent)tanımlayıcısını kullanarak Blueprint’te uygulamanız gereken bir saf sanal fonksiyon tanımlayın.UFUNCTION(BlueprintNativeEvent)tanımlayıcısını kullanarak Blueprint’te isteğe bağlı olarak geçersiz kılabileceğiniz bir sanal fonksiyon tanımlayın.Bir kullanıcı arayüzü oluştururken
UPROPERTY(meta=(BindWidget)). tanımlayıcısını kullanarak Blueprint’te oluşturulmuş bir UserWidget’a erişebilirsiniz.
Bu metotlar hakkında daha fazla bilgi için aşağıdaki sayfalara bakın:
C++ ve Blueprint: Blueprint’e genişletilebilir bir C++ sınıfı oluşturmaya ilişkin ayrıntılı bir örnek.
C++’ı Blueprint’lerin Kullanımına Açma: Blueprint’e uygun bir API yazma hakkında ipuçları ve püf noktaları.
Oynanış Öğelerini Blueprint’lerin Kullanımına Açma: Oynanış programcıları için oynanış öğelerini Blueprint’lerin kullanıma açmaya ilişkin teknik kılavuz.
Blueprint Fonksiyon Kütüphanesi:
UBlueprintFunctionLibraryfonksiyonunu nasıl kullanacağınızı öğrenin.Lyra Örnek Oyunu: Yukarıda ele alınan metotların her birinin örneklerini gösteren Lyra projesi hakkında bilgi edinin.
Blueprint’i C++’a Dönüştürme
Blueprint’inizi C++’a dönüştürmek istiyorsanız öncelikle Blueprint Başlık Görünümünü kullanarak bir Blueprint sınıfı veya yapısı için C++ başlık dosyası oluşturun. Oluşturulan .h dosyası, Blueprint’inizdeki tüm değişken ve fonksiyon beyanlarını içerir ancak fonksiyon uygulamanızı eşleşen .cpp dosyasına manuel olarak dönüştürmeniz gerekir. aktarır.
Bir Blueprint’i C++’a dönüştürdükten sonra yeni C++ sınıfını kullanmak için referansları güncellemeniz gerekebilir. Bunu yapmak çok sayıda zorunlu güncelleme ile sonuçlanırsa bu referansları otomatik olarak yeniden eşlemek için Temel Yeniden Yönlendirmeleri kullanmayı düşünün.