UPROPERTY ve UFUNCTION makroları ne işe yarar? Unreal'ın reflection sistemi nasıl çalışır?
Cevap
C++'ın yerleşik bir runtime reflection'ı yoktur. Unreal bunu Unreal Header Tool (UHT) ile çözer: derleme öncesi header'lardaki UCLASS, USTRUCT, UPROPERTY, UFUNCTION makrolarını tarar ve .generated.h dosyalarına metadata kodu üretir. Bu metadata sayesinde motor sınıfları, alanları ve fonksiyonları çalışma zamanında tanır.
Reflection'a bağlı özellikler:
- Garbage collection: GC, referansları sadece
UPROPERTYolarak işaretlenmiş alanlar üzerinden izler. - Editör: Details panelinde görünme ve düzenleme.
- Serileştirme: Asset ve save verisine yazma.
- Blueprint erişimi: Okuma, yazma, çağırma.
- Ağ:
Replicatedalanlar ve RPC'ler.
Sık kullanılan specifier'lar:
| Specifier | Anlamı |
|---|---|
| EditAnywhere | Hem default'ta hem instance'ta düzenlenir |
| EditDefaultsOnly | Sadece sınıf varsayılanında düzenlenir |
| VisibleAnywhere | Görünür ama değiştirilemez (component pointer'ları için) |
| BlueprintReadWrite / ReadOnly | BP erişimi |
| Replicated / ReplicatedUsing | Ağ replikasyonu |
| Transient | Serileştirilmez |
| BlueprintCallable / BlueprintPure | UFUNCTION için BP'den çağrılabilirlik |
UCLASS()
class AChest : public AActor
{
GENERATED_BODY() // UHT'nin ürettiği kod buraya eklenir
UPROPERTY(EditAnywhere, Category="Loot", meta=(ClampMin="0"))
int32 GoldAmount = 10;
UFUNCTION(BlueprintCallable, Category="Loot")
void Open();
};Sınırlama: Template'ler ve bazı tipler (ör. std::vector, raw int*) reflect edilemez; Unreal container'ları (TArray, TMap, TSet) kullanılır.
İlgili Unreal & C++ soruları
- Oyun motorlarında neden custom memory allocator kullanılır? Linear (arena), pool ve stack allocator nasıl çalışır?
- Cache-friendly veri yapısı ne demektir? Array of Structs (AoS) ile Struct of Arrays (SoA) farkı nedir?
- C++'ta move semantics nedir? Aşağıdaki kodda hangi constructor'lar çağrılır?
- C++'ta virtual fonksiyonlar ve vtable nasıl çalışır? Destructor neden virtual olmalıdır?
- Unreal'da replication nasıl çalışır? Replicated property, RepNotify ve RPC türleri arasındaki fark nedir?
- Unreal'ın Gameplay Framework'ünde GameMode, GameState, PlayerController, PlayerState ve Pawn'ın rolleri nelerdir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.