cahitburak

Yeni üye
13 Ağu 2015
740
160
0
37
Belirtilmemiş
tr.linkedin.com
Bu konudaki bilgilerim kısıtlı ama UObject alt sınıfları, IsSupportedForNetworking metodu override edilerek replicated ediliyormuş.

UObject.h (satır 616)
Kod:
/** IsSupportedForNetworking means an object can be referenced over the network */
	virtual bool IsSupportedForNetworking() const;

Kullanım
Kod:
//...
class X_API UItem : public UObject
{
   //...
   virtual bool IsSupportedForNetworking() override;
   //...
}

bool UItem::IsSupportedFornetworking()
{
   return true;
}


Not: Metot açıkça değerinin runtime değiştirilmemesi gerektiğini söylüyor (const). Buna dikkat çekmek gerek. Daima bir sabit girmek gerekir (return true / return false).

https://forums.unrealengine.com/showthread.php?59275-Replicating-TArrays-crashes-game&p=231425
 
Yaptığım bir multiplayer çalışmada Inventory için Itemlerı UObject sınıfından oluşturdum. Ancak bu sınıfın Actor veya Pawn gibi Replicate edilemediğini öğrendim. 'bReplicate' veya 'SetReplicate()' gibi özellikler Actor sınıfı ile geliyor muhtemelen. Acaba başka bir yöntem ile replicate edilebilir mi ? yoksa baştan aşağı Item öğelerini Actor sınıfından mı türetmem gerekiyor ?
 
cahitburak' Alıntı:
Bu konudaki bilgilerim kısıtlı ama UObject alt sınıfları, IsSupportedForNetworking metodu override edilerek replicated ediliyormuş.

UObject.h (satır 616)
Kod:
/** IsSupportedForNetworking means an object can be referenced over the network */
	virtual bool IsSupportedForNetworking() const;

Kullanım
Kod:
//...
class X_API UItem : public UObject
{
   //...
   virtual bool IsSupportedForNetworking() override;
   //...
}

bool UItem::IsSupportedFornetworking()
{
   return true;
}


Not: Metot açıkça değerinin runtime değiştirilmemesi gerektiğini söylüyor (const). Buna dikkat çekmek gerek. Daima bir sabit girmek gerekir (return true / return false).

https://forums.unrealengine.com/showthread.php?59275-Replicating-TArrays-crashes-game&p=231425
Yazdıklarınızı deneyeceğim teşekkürler, benimde yaptığım bir kaç araştırmada AActor ün replicate edilmesinin daha verimli olacağından bahsediliyor ancak kodları UObject sınıfına göre tasarladığım için bu yazdıklarınızı deneyeceğim.
 
Burada belirtmiş olduğum fonksiyonun sonundaki const ifadesi ile ilgili olarak bazı yanlışlarımı düzeltmem gerek.

Fonksiyon sonundaki const ifadesinin asıl görevi bu fonksiyonun üyesi bulunduğu yapıya ait hiç bir üyenin değerini değiştirememesini garanti altına almaktır.

Örnek:
Kod:
class Foo
{
    int value;

public:

    Foo() : value(0) {}
    void IncValue() { value++; }
    void Bar() const { //... }
    int GetValue() const;
};

int Foo::GetValue() const
{
    value = 1;     // Üye değeri değiştirilemez (VC++ Compile Error C3490).
    IncValue();    // Üye değerini değiştiren bir fonksiyon da çağrılamaz (VC++ Compile Error C3490).
    Bar();           // const ifadesi ile biten her fonksiyon çağrılabilir.
    return value; // Döndürülen değerin sabit (const) olması gerekmiyor, burada hata yok.
}
VC++ Compile Error C3490: 'Value' cannot be modified because it is being accessed through a const object