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ürNerede çağrılırNerede çalışır
ServerSahibi olan clientServer
ClientServerSahibi olan client
NetMulticastServerServer + 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 _Validate veya 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.

  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'ın Gameplay Framework'ünde GameMode, GameState, PlayerController, PlayerState ve Pawn'ın rolleri nelerdir?OrtaUnreal & C++Game Dev
  6. TSharedPtr, TUniquePtr, TWeakPtr ve TWeakObjectPtr arasındaki farklar 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