Unreal'da replication nasıl çalışır? Replicated property, RepNotify ve RPC türleri arasındaki fark nedir?
Cevap
Unreal server-authoritative bir model kullanır: oyun durumu server'da gerçektir ve server değişiklikleri client'lara replicate eder. İki temel mekanizma vardır: property replication (durum) ve RPC (olay/çağrı).
Property replication
Server'da değişen alan, sonraki net update'te ilgili client'lara gönderilir. Sadece server → client yönlüdür.
UPROPERTY(ReplicatedUsing=OnRep_Health)
float Health;
UFUNCTION()
void OnRep_Health(); // client'ta değer geldiğinde çalışır (UI, efekt)
void AMyCharacter::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& Out) const
{
Super::GetLifetimeReplicatedProps(Out);
DOREPLIFETIME_CONDITION(AMyCharacter, Health, COND_OwnerOnly);
}Actor'da bReplicates = true olmalıdır. C++'ta OnRep server'da otomatik çağrılmaz; gerekirse elle çağrılır.
RPC türleri
| Tür | Nerede çağrılır | Nerede çalışır |
|---|---|---|
| Server | Sahibi olan client | Server |
| Client | Server | Sahibi olan client |
| NetMulticast | Server | Server + tüm ilgili client'lar |
UFUNCTION(Server, Reliable, WithValidation)
void ServerFire(FVector_NetQuantize Dir);- Reliable RPC'ler garanti ve sıralıdır ama fazla kullanılırsa bant genişliğini ve kuyruğu tıkar; kozmetik efektler Unreliable olmalıdır.
- Server RPC sadece client'ın sahibi olduğu Actor üzerinden (PlayerController, possess edilen Pawn) çağrılabilir.
- Hile önleme: client'tan gelen veriyi
_Validateveya server mantığıyla doğrulayın.
Network roller
GetLocalRole(): ROLE_Authority (server), ROLE_AutonomousProxy (kendi kontrol ettiği karakter), ROLE_SimulatedProxy (diğer oyuncular). HasAuthority() ile server mantığı ayrılır.
Kalıcı durum (can, mermi sayısı) property ile; anlık olaylar (ateş efekti) Unreliable Multicast ile iletilir. Geç bağlanan oyuncu property'leri alır ama geçmiş multicast'leri almaz. Ölçek için relevancy, NetUpdateFrequency, dormancy ve gerekirse Iris/Replication Graph 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'ın Gameplay Framework'ünde GameMode, GameState, PlayerController, PlayerState ve Pawn'ın rolleri nelerdir?
- TSharedPtr, TUniquePtr, TWeakPtr ve TWeakObjectPtr arasındaki farklar 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.