Kafayı yiyecektim arkadaşlar. Unreal'de bir mekanik düşündüm, hemen Blueprint editorüne daldım. Sürükle-bırak, bağla, event tetikle... Şaka gibi ama iki saatte çalışan, görsel bir prototip hazırdı. "Vay be, ne kadar verimli" diye kendimi tebrik ettim. Tabii ki sonra gerçeklik tokatı geldi.
Performans testlerinde, özellikle Tick içinde dönen o görsel script'ler, FPS'yi gözle görülür şekilde düşürmeye başladı. "Tamam" dedim, "Prototip hazır, mantık belli. Şimdi temiz C++'a port ederim, birkaç saat sürer."
Meğerse sorun şuradaymış: Blueprint'te görsel olarak yaptığın her küçük mantık parçası, C++'da elle yazılması gereken bir sürü satır koda denk geliyor. Blueprint'teki bir Timeline node'u veya basit bir Lerp, C++ tarafında timer'lar, delta time hesaplamaları ve interpolation fonksiyonları demek.
C++:
// Blueprint'te 1 node. Burada... biraz daha fazlası.
FVector CurrentLocation = FMath::VInterpTo(CurrentLocation, TargetLocation, DeltaTime, InterpSpeed);
Üstelik, Blueprint'te otomatik handle edilen şeyler - UObject referansları, delegate bağlamaları, AActor component erişimleri - C++'da daha dikkatli yönetilmeli. Unreal'in C++'ı kendine has, UProperty(), UFUNCTION() makroları falan derken, "çalışıyor" demenin yolu prototipi yapmaktan katbekat uzun sürdü.
Şimdi bakıyorum da, Blueprint hızlı prototip için HARİKA. Ama onu direkt 1:1 C++'a çevirmeye çalışmak en büyük hata. Dersimi aldım: Artık Blueprint'le sadece konsepti ve akışı test ediyorum. C++'a geçerken ise, Blueprint'teki o "hızlı ve kirli" mantığı baştan, daha temiz ve optimizasyona açık bir mimariyle yazıyorum. Blueprint artık sadece C++'da yazdığım UCLASS'ların parametrelerini ayarlamak veya basit UI tetikleyicileri için.
Siz de benim gibi "Blueprint'te 2 saat, C++'a aktarmak 2 gün" tuzağına düştünüz mü? Bu süreci hızlandıracak, Blueprint'ten daha temiz C++ çıktısı almayı sağlayacak bir sihirli değnek (plugin/tool) biliyor musunuz? Yoksa herkes aynı acıyı çekerek mi öğreniyor?