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 UPROPERTY olarak 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ğ: Replicated alanlar ve RPC'ler.

Sık kullanılan specifier'lar:

SpecifierAnlamı
EditAnywhereHem default'ta hem instance'ta düzenlenir
EditDefaultsOnlySadece sınıf varsayılanında düzenlenir
VisibleAnywhereGörünür ama değiştirilemez (component pointer'ları için)
BlueprintReadWrite / ReadOnlyBP erişimi
Replicated / ReplicatedUsingAğ replikasyonu
TransientSerileştirilmez
BlueprintCallable / BlueprintPureUFUNCTION 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.

  1. Oyun motorlarında neden custom memory allocator kullanılır? Linear (arena), pool ve stack allocator nasıl çalışır?ZorUnreal & C++Game Dev
  2. Cache-friendly veri yapısı ne demektir? Array of Structs (AoS) ile Struct of Arrays (SoA) farkı nedir?ZorUnreal & C++Game Dev
  3. C++'ta move semantics nedir? Aşağıdaki kodda hangi constructor'lar çağrılır?ZorUnreal & C++Game Dev
  4. C++'ta virtual fonksiyonlar ve vtable nasıl çalışır? Destructor neden virtual olmalıdır?OrtaUnreal & C++Game Dev
  5. Unreal'da replication nasıl çalışır? Replicated property, RepNotify ve RPC türleri arasındaki fark nedir?ZorUnreal & C++Game Dev
  6. Unreal'ın Gameplay Framework'ünde GameMode, GameState, PlayerController, PlayerState ve Pawn'ın rolleri nelerdir?OrtaUnreal & C++Game Dev

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle